- 浏览: 72414 次
- 性别:
- 来自: 常州
文章分类
最新评论
-
yx1989:
不错,讲解得很清楚
Scanner的用法误区 -
lijunjie337:
你这是DES还是3DES啊??
JAVA中3des加密算法 -
啸笑天:
...
关键字 过滤算法 -
javamvp:
看看
策略设计模式 -
bianku:
...
成为Java高手的25个学习要点
# include <dos.h> # include "13h.h" /*显示中断*/ # include <time.h> # include <stdio.h> # include "timer.h" # include <alloc.h> # include <stdlib.h> struct stBOMB /*鱼雷结构*/ { int x; /*鱼雷X轴坐标*/ int y; /*鱼雷Y轴坐标*/ BOOL Used; /* BOOL宏定义在13H.H中,标志鱼雷是否被引爆: */ /*TRUE表示未引爆,可以使用,FALSE表示已引爆,不能使用*/ }; struct stEXPL /*爆炸动画结构*/ { int x; /*爆炸动画X轴坐标*/ int y; /*爆炸动画Y轴坐标*/ BYTE Num; /* BOOL宏定义在13H.H中,播放爆炸现场的当前帧数*/ BOOL Used; /*标志爆炸是否被播放*/ }; struct stSHIP /*潜艇结构*/ { int x; /*潜艇X轴坐标*/ int y; /*潜艇Y轴坐标*/ BOOL Used; /*标志潜艇是否被引爆*/ BYTE Dir; BYTE Type; }; struct stTORP /*水雷结构*/ { int x; /*水雷X轴坐标*/ int y; /*水雷Y轴坐标*/ BOOL Used; /*标志水雷是否被引爆*/ }; struct stBOMB bbBomb[21]; struct stSHIP spShip[21]; struct stTORP tpTorp[21]; struct stEXPL elExpl[21]; int BombUsed=0; int ShipUsed=0; int TorpUsed=0; int ExplUsed=0; int MAXBOMB=5; /*最多鱼雷数目*/ int MAXSHIP=3; /*最多潜艇数目*/ int MAXTORP=5; /*最多水雷数目*/ int MAXEXPL=5; /*最多爆炸数目*/ int ID_Timer[MAXTIMER+1]; int ID_Bomb[21]; int ID_Ship[21]; int ID_Torp[21]; int ID_Expl[21]; BOOL DISP=TRUE; BOOL CLS=FALSE; BOOL bPaint=FALSE; BOOL ALIVE=TRUE; BOOL SOUND=TRUE; BOOL Flash=FALSE; BOOL DONE=FALSE; BYTE SHIP[2][32][64]; BYTE BOMB[32][32]; BYTE TORP[16][16]; BYTE PAL[256][3]; BYTE STR[80]; BYTE far * PIC_EXPL; BYTE far * PIC_SHIP; void far * Back1; void far * Back2; int MyX=0; int MyY=0; int Life=3; int Score=25; int LevelScore=25; int Level=0; int Step=0; char *Info="\ \ \ Welcome to play this game!\ \n\ \n\ \n\ In this game,you will drive a warship to fight with\n\ the submarines.\n\n\ KEYS:\n\ 'Left' and 'Right' keys to move your warship.\n\ 'Space bar' or 'Ctrl' key to send bombs.\n\ 'S' key is a sound switch.\n\ 'D' key is a state switch.\n\n\ \n\ \n\n\ GOOD LUCK!\0"; /* 调色板渐入 */ void StepIn() { int i; for (i=0;i<256;i++) /*设置调色板 */ setpal(i,PAL[i][0]*Step/64,PAL[i][1]*Step/64,PAL[i][2]*Step/64); Step++; if (Step>64) KillAllTimer();/* 删除所有时钟 */ } /* 调色板渐出 */ void StepOut() { int i; for (i=0;i<256;i++) /*设置调色板 */ setpal(i,PAL[i][0]*Step/64,PAL[i][1]*Step/64,PAL[i][2]*Step/64); Step--; if (Step<1) KillAllTimer();/* 删除所有时钟 */ } /*输出信息*/ void OutInfo() { if (*Info++) { sound(1000); printf("%c",*(Info-1)); nosound(); } else KillAllTimer(); } /* 显示开始画面 */ void Logo() { FILE *bmp; int i,r,g,b,x,y; setmode(); bmp=fopen("logo.bmp","rb");/*打开位图文件*/ fseek(bmp,54,SEEK_SET); /*打开调色板段*/ for (i=0;i<256;i++) { PAL[i][2]=fgetc(bmp)>>2; PAL[i][1]=fgetc(bmp)>>2; PAL[i][0]=fgetc(bmp)>>2; fgetc(bmp); setpal(i,0,0,0); } for (y=0;y<200;y++) /*向屏幕描点*/ for (x=0;x<320;x++) pokeb(0xa000,y*320+x,fgetc(bmp)); fclose(bmp); CreateTimer(1,StepIn); /*建立时钟*/ while (ScanKey()!=57&&TimerUsed) TimerEvent(); /*等待键盘输入*/ Step=64; StepIn(); /*渐入图片*/ wait(); CreateTimer(1,StepOut); while (ScanKey()!=57&&TimerUsed) TimerEvent(); Step=0; StepOut();/*渐出图片*/ closemode(); CreateTimer(2,OutInfo); locate(6,26); while (ScanKey()!=57&&TimerUsed) TimerEvent(); while (*Info++) printf("%c",*(Info-1)); wait(); } void KillSelf() /*如果中弹,减少生命值,直到毁灭*/ { if (SOUND) { sound(1000); delay(1000); nosound(); } Life--; if (Life<0) ALIVE=FALSE; } /* 设置系统所有调色板 */ void SetAllPal() { FILE *act; int i,r,g,b; act=fopen("comm.act","rb"); for (i=0;i<256;i++) { r=fgetc(act)>>2; g=fgetc(act)>>2; b=fgetc(act)>>2; setpal(i,r,g,b); } fclose(act); } /* 从位图中读出军舰的形状 */ void readboat() { FILE *bmp; int x,y; bmp=fopen("boat.bmp","rb"); fseek(bmp,1078,SEEK_SET); for (y=0;y<32;y++) { for (x=0;x<64;x++) SHIP[0][31-y][x]=fgetc(bmp); for (x=0;x<64;x++) SHIP[1][31-y][x]=fgetc(bmp); } fclose(bmp); } /* 从位图中读出鱼雷的形状 */ void readbomb() { FILE *bmp; int x,y; bmp=fopen("bomb.bmp","rb"); fseek(bmp,516,SEEK_SET); for (y=0;y<32;y++) for (x=0;x<32;x++) BOMB[31-y][x]=fgetc(bmp); fclose(bmp); } /* 从位图中读出水雷的形状 */ void readtorp() { FILE *bmp; int x,y; bmp=fopen("torp.bmp","rb"); fseek(bmp,516,SEEK_SET); for (y=0;y<16;y++) for (x=0;x<16;x++) TORP[15-y][x]=fgetc(bmp); fclose(bmp); } /* 从位图中读出潜艇的形状 */ void readship() { FILE *bmp; long i; PIC_SHIP=Back2; bmp=fopen("ship.bmp","rb"); fseek(bmp,1078,SEEK_SET); for (i=0;i<10080;i++) *PIC_SHIP++=fgetc(bmp); fclose(bmp); } /* 从位图中读出爆炸的形状 */ void readexpl() { FILE *bmp; long i; PIC_EXPL=Back1; bmp=fopen("expl.bmp","rb"); fseek(bmp,1078,SEEK_SET); for (i=0;i<59520;i++) *PIC_EXPL++=fgetc(bmp); fclose(bmp); } /*移动鱼雷*/ void bomb(int xx,int yy) { int y,x; for (y=0;y<32;y++) for (x=0;x<32;x++) if (BOMB[y][x]) Pset(x+xx,y+yy,BOMB[y][x]); } /*移动潜艇*/ void boat(int xx,int yy,int num) { int y,x; for (y=0;y<32;y++) for (x=0;x<64;x++) if (SHIP[num][y][x]) Pset(x+xx,y+yy,SHIP[num][y][x]); } /*移动水雷*/ void torp(int xx,int yy) { int y,x; for (y=0;y<16;y++) for (x=0;x<16;x++) if (TORP[y][x]) Pset(x+xx,y+yy,TORP[y][x]); } /*移动潜艇*/ void ship(int xx,int yy,BYTE Type,BYTE Dir) { int x,y; bPaint=TRUE; PIC_SHIP=Back2; PIC_SHIP+=(long)(Type*2+Dir)*63l; for (y=0;y<20;y++) { for (x=0;x<63;x++) if (*PIC_SHIP++) Pset(x+xx,19-y+yy,*(PIC_SHIP-1)); PIC_SHIP+=441l; } } /* 物体系统*/ /*创建各个物体*/ int CreateTorp(int x,int y) { int i=0; if (TorpUsed==MAXTORP) return NULL; while (tpTorp[++i].Used); tpTorp[i].x=x; tpTorp[i].y=y; tpTorp[i].Used=TRUE; TorpUsed++; return i; } /*删除各个物体*/ void KillTorp(int *TorpID) { if (tpTorp[*TorpID].Used) { TorpUsed--; tpTorp[*TorpID].Used=FALSE; } *TorpID=NULL; } /*下面开始不再注释,太累了,谁有时间可以帮忙注释一下*/ void DrawTorp() { int i=0; int ID; while (!tpTorp[++i].Used); if (i==MAXTORP+1) return; bPaint=TRUE; if (!CLS) { ClearScreen(2); CLS=TRUE; } for (i=1;i<=MAXTORP;i++) { if (tpTorp[i].Used) { if (tpTorp[i].y<34) { KillTorp(&ID_Torp[i]); /* 我方船只被炸 */ if (tpTorp[i].x-MyX>10&&tpTorp[i].x-MyX<50) { ID=CreateExpl(tpTorp[i].x-23,tpTorp[i].y-26); if (ID) ID_Expl[ID]=ID; KillSelf(); } } torp(tpTorp[i].x,tpTorp[i].y); tpTorp[i].y--; } } } int CreateShip(int y,BYTE Type) { int i=0; if (ShipUsed==MAXSHIP) return NULL; while (spShip[++i].Used); spShip[i].y=y; spShip[i].Used=TRUE; spShip[i].Dir=random(2); spShip[i].Type=Type; spShip[i].x=-64; if (!spShip[i].Dir) spShip[i].x=320; ShipUsed++; return i; } void KillShip(int *ShipID) { if (spShip[*ShipID].Used) { ShipUsed--; spShip[*ShipID].Used=FALSE; } *ShipID=NULL; } void DrawShip() { int i=0; int ID; while (!spShip[++i].Used); if (i==MAXSHIP+1) return; bPaint=TRUE; if (!CLS) { ClearScreen(2); CLS=TRUE; } for (i=1;i<=MAXSHIP;i++) { if (spShip[i].Used) { if (random(10)==3) { ID=CreateTorp(spShip[i].x+32,spShip[i].y); if (ID) ID_Torp[ID]=ID; } ship(spShip[i].x,spShip[i].y,spShip[i].Type,spShip[i].Dir); if (spShip[i].Dir) { spShip[i].x+=2; if (spShip[i].x>320) KillShip(&ID_Ship[i]); } else { spShip[i].x-=2; if (spShip[i].x<-64) KillShip(&ID_Ship[i]); } } } } int CreateExpl(int x,int y) { int i=0; if (ExplUsed==MAXEXPL) return NULL; while (elExpl[++i].Used); elExpl[i].x=x; elExpl[i].y=y; elExpl[i].Used=TRUE; elExpl[i].Num=0; ExplUsed++; return i; } void KillExpl(int *ExplID) { if (elExpl[*ExplID].Used) { ExplUsed--; elExpl[*ExplID].Used=FALSE; elExpl[*ExplID].Num=0; } *ExplID=NULL; } void DrawExpl() { int x,y,i=0; while (!elExpl[++i].Used); if (i==MAXEXPL+1) return; bPaint=TRUE; if (!CLS) { ClearScreen(2); CLS=TRUE; } for (i=1;i<=MAXEXPL;i++) { if (elExpl[i].Num==15) KillExpl(&ID_Expl[i]); if (elExpl[i].Used) { bPaint=TRUE; PIC_EXPL=Back1; PIC_EXPL+=(long)elExpl[i].Num*62l; elExpl[i].Num++; for (y=0;y<64;y++) { if (SOUND) sound(random(2000)+500); for (x=0;x<62;x++) if (*PIC_EXPL++) Pset(x+elExpl[i].x,(63-y)+elExpl[i].y,*(PIC_EXPL-1)); PIC_EXPL+=870l; } nosound(); } } } int CreateBomb(int x,int y) { int i=0; if (BombUsed==MAXBOMB) return NULL; while (bbBomb[++i].Used); bbBomb[i].x=x; bbBomb[i].y=y; bbBomb[i].Used=TRUE; BombUsed++; return i; } void KillBomb(int *BombID) { if (bbBomb[*BombID].Used) { BombUsed--; bbBomb[*BombID].Used=FALSE; } *BombID=NULL; } void DrawBomb() { int i=0,j; int ID; while (!bbBomb[++i].Used); if (i==MAXBOMB+1) return; bPaint=TRUE; if (!CLS) { ClearScreen(2); CLS=TRUE; } for (i=1;i<=MAXBOMB;i++) { if (bbBomb[i].Used) { for (j=1;j<=MAXSHIP;j++) { if (spShip[j].Used&& abs(spShip[j].y-bbBomb[i].y)<16&& abs(spShip[j].x-bbBomb[i].x+16)<32) { switch (spShip[j].Type) { case 0: Score+=10; LevelScore+=10; break; case 1: Score+=20; LevelScore+=20; break; case 2: Score+=40; LevelScore+=40; break; case 3: Life++; break; } KillShip(&ID_Ship[j]); KillBomb(&ID_Bomb[i]); ID=CreateExpl(bbBomb[i].x-20,bbBomb[i].y); if (ID) ID_Expl[ID]=ID; } } bomb(bbBomb[i].x,bbBomb[i].y); bbBomb[i].y+=2; if (bbBomb[i].y>170) KillBomb(&ID_Bomb[i]); } } } void DrawObject() { CLS=FALSE; DrawBomb(); DrawShip(); DrawTorp(); if (!bPaint) return; if (!CLS) ClearScreen(2); boat(MyX,2,Flash); DrawExpl(); if (DISP) { OutString(0,0,"LIFE:",96); itoa(Life+1,STR,10); OutString(5,0,STR,96); if (SOUND) OutString(7,0,"Sound",2); itoa(MAXBOMB-BombUsed,STR,10); OutString(13,0,"BOMB:",89); OutString(18,0,STR,89); itoa(Level+1,STR,10); OutString(21,0,"LEVEL:",13); OutString(27,0,STR,13); OutString(30,0,"SCORE:",52); itoa(Score,STR,10); OutString(36,0,STR,52); } ReFresh(); } void InitGame() { int i; BombUsed=0; ShipUsed=0; TorpUsed=0; ExplUsed=0; for (i=1;i<=MAXSHIP;i++) KillShip(&ID_Ship[i]); for (i=1;i<=MAXBOMB;i++) KillBomb(&ID_Bomb[i]); for (i=1;i<=MAXTORP;i++) KillTorp(&ID_Torp[i]); for (i=1;i<=MAXEXPL;i++) KillExpl(&ID_Expl[i]); Flash=FALSE; ALIVE=TRUE; DONE=FALSE; MyX=0; MyY=0; Life=3; Score=25; LevelScore=25; Level=0; } void GameMain() { BYTE bKey; int ShipType; int i,ID; bKey=ScanKey(); while (bKey!=1&&ALIVE) { TimerEvent(); if (Life==0) Flash=!Flash; else Flash=FALSE; if (random(10)==4) { i=random(100); if (i<50) ShipType=0; else if (i>=50&&i<75) ShipType=1; else if (i>=75&&i<95) ShipType=2; else if (i>95) ShipType=3; ID=CreateShip(random(6)*20+70,ShipType); if (ID) ID_Ship[ID]=ID; } switch (bKey) { case 115: case 75: bPaint=TRUE; MyX-=4; if (MyX<0) MyX=0; break; case 2: Life++; break; case 3: MAXBOMB++; if (MAXBOMB>20) MAXBOMB=20; case 77: case 116: bPaint=TRUE; MyX+=4; if (MyX>256) MyX=256; break; case 31: SOUND=!SOUND; break; case 32: DISP=!DISP; break; case 57: if (LevelScore==0) break; ID=CreateBomb(MyX+20,32); if (ID) { Score-=5; LevelScore-=5; ID_Bomb[ID]=ID; } } bKey=ScanKey(); if (LevelScore>=500) { Level++; LevelScore=0; if (Level<15) OutString(15,10,"Next Level!",13); else { OutString(14,10,"Very Good!!",13); DONE=TRUE; bKey=1; } ReFresh(); wait(); } MAXSHIP=Level+3; MAXTORP=Level+5; MAXEXPL=Level+5; } } void main() { BOOL QUIT=FALSE; int nKey; Video=farmalloc(64000); if (Video==NULL) { printf("Not enough Memory\n"); exit(0); } Back1=farmalloc(59520); if (Back1==NULL) { printf("Not enough Memory\n"); farfree(Video); exit(0); } Back2=farmalloc(10080); if (Back2==NULL) { printf("Not enough Memory\n"); farfree(Back2); farfree(Video); exit(0); } randomize(); Logo(); setmode(); SetAllPal(); readboat(); readship(); readexpl(); readbomb(); readtorp(); ClearScreen(2); boat(0,2,0); KillAllTimer(); CreateTimer(1,DrawObject); ReFresh(); while (!QUIT) { GameMain(); bPaint=TRUE; if (!ALIVE) OutString(15,10,"GAME OVER",96); OutString(14,12,"QUIT? (Y/N)",89); ReFresh(); nKey=getch(); while (!(nKey=='Y'||nKey=='y'||nKey=='N'||nKey=='n')) { nKey=getch(); } if (nKey=='Y'||nKey=='y') QUIT=TRUE; if (!ALIVE||DONE) InitGame(); } closemode(); KillAllTimer(); farfree(Video); farfree(Back1); farfree(Back2); printf("***NOBLE STUDIO***Written By FanobleMeng--2001.12"); } 用到的头文件编写: /*********************************************************/ /* 文件:TIMER.H */ /*********************************************************/ /* 系统可用计时器的最大数目 */ # define MAXTIMER 10 /* 计时器结构 */ struct TM { DWORD Interval; /* 间隔 */ DWORD LastTimer; /* 上次时间发生时间*/ BOOL Enable; /* 活动 */ BOOL Used; /* 可用 */ void (*Pointer)(); /* 事件远指针 */ }; struct TM tmTM[MAXTIMER+1]; int TimerUsed=0; /* 获取BIOS计数器数值 */ DWORD BiosTimer(void) { DWORD BIOSTIMER=0; BIOSTIMER=peek(0x0,0x46e); BIOSTIMER<<=8; BIOSTIMER+=peek(0x0,0x46c); return (BIOSTIMER); } /* 时间事件(时钟系统核心) */ void TimerEvent() { int i; DWORD TimerDiff; for (i=1;i<=MAXTIMER;i++) { if (tmTM[i].Used&&tmTM[i].Enable) { TimerDiff=BiosTimer()-tmTM[i].LastTimer; if (tmTM[i].Interval<=TimerDiff) { tmTM[i].Pointer(); tmTM[i].LastTimer=BiosTimer(); } } } } /* 创建一个时钟(成功返回时钟的句柄,否则返回NULL) */ int CreateTimer(DWORD Interval,void (*Pointer)()) { int i=0; if (TimerUsed==MAXTIMER) return NULL; while (tmTM[++i].Used); tmTM[i].Pointer=Pointer; tmTM[i].Interval=Interval; tmTM[i].Enable=TRUE; tmTM[i].Used=TRUE; tmTM[i].LastTimer=BiosTimer(); TimerUsed++; return i; } /* 删除一个时钟 */ void KillTimer(int *TimerID) { if (tmTM[*TimerID].Used) { TimerUsed--; tmTM[*TimerID].Used=FALSE; } *TimerID=0; } /* 删除所有时钟 */ void KillAllTimer() { int i; for (i=0;i<=MAXTIMER;i++) tmTM[i].Used=FALSE; TimerUsed=0; } /*********************************************************/ /* 文件:13H.H */ /*********************************************************/ /* 此处定义了一些通用的宏 */ # define BYTE unsigned char # define BOOL BYTE # define WORD unsigned int # define DWORD unsigned long # define TRUE 1 # define FALSE !TRUE /* BIOS 8*8 西文字库的段地址和偏移量 */ WORD FONT_SEG; WORD FONT_OFF; /* 显示后台活动页地址 */ void far * Video; /* 获取BIOS 8*8 西文字库的段地址和偏移量 */ void GetFontAdd() { struct REGPACK regs; regs.r_bx=0x0300; regs.r_ax=0x1130; intr(0x10,®s); FONT_SEG=regs.r_es; FONT_OFF=regs.r_bp; } /* 向后台活动页写像素 */ void Pset(int x,int y,BYTE color) { if ((x>=0)&&(x<320)&&(y>=0)&&(y<200)) *((BYTE far*)Video+y*320+x)=color; } /* 等待键盘输入 */ void wait() { _AX=0; geninterrupt(0x16); } /* 设置VGA 13H模式 */ void setmode() { _AX=0x13; geninterrupt(0x10); GetFontAdd(); } /* 设置文本模式 */ void closemode() { _AX=0x3; geninterrupt(0x10); } /* 设置调色板 */ void setpal(int Color,BYTE r,BYTE g,BYTE b) { outportb(0x3c8,Color); outportb(0x3c9,r); outportb(0x3c9,g); outportb(0x3c9,b); } /* 屏幕定位(用于输出字符)*/ void locate(int Line,int Col) { _DH=Line; _DL=Col; _AH=2; _BX=0; geninterrupt(0x10); } /* 从键盘缓冲区内直接读出扫描码 */ BYTE ScanKey(void) { int start,end; WORD key=0; start=peek(0,0x41a); end=peek(0,0x41c); if (start==end) return(0); else { key=peek(0x40,start); start+=2; if (start==0x3e) start=0x1e; poke(0x40,0x1a,start); return(key/256); } } /* 画背景 */ void ClearScreen() { int x,y; for (y=0;y<5;y++) for (x=0;x<320;x++) Pset(x,y,16); for (y=5;y<10;y++) for (x=0;x<320;x++) Pset(x,y,104); for (y=10;y<15;y++) for (x=0;x<320;x++) Pset(x,y,33); for (y=15;y<20;y++) for (x=0;x<320;x++) Pset(x,y,103); for (y=20;y<25;y++) for (x=0;x<320;x++) Pset(x,y,32); for (y=25;y<30;y++) for (x=0;x<320;x++) Pset(x,y,64); for (y=30;y<40;y++) for (x=0;x<320;x++) Pset(x,y,99); for (y=40;y<60;y++) for (x=0;x<320;x++) Pset(x,y,97); for (y=60;y<100;y++) for (x=0;x<320;x++) Pset(x,y,53); for (y=100;y<200;y++) for (x=0;x<320;x++) Pset(x,y,2); } /* 刷新屏幕 */ void ReFresh(void) { movedata(FP_SEG(Video),FP_OFF(Video),0xa000,0,64000); } /* 输出字符到显示后台活动页 */ void OutChar(int x0,int y0,int ch,BYTE Color) { int x,y; BYTE c; for (y=0;y<8;y++) { c=peekb(FONT_SEG,FONT_OFF+ch*8+y); for (x=0;x<8;x++) { if (c&(1<<(7-x))) Pset(x+x0*8,y+y0*8,Color); } } } /* 输出字符串到显示后台活动页 */ void OutString(int x,int y,char *p,BYTE Color) { while (*p) { OutChar(x++,y,*p++,Color); if (x==40) { x=0; y++; } } }
发表评论
-
C++ 虚函数表解析
2007-12-18 22:07 736C++ 虚函数表解析<?xml: ... -
C++ 对象的内存布局(上)
2008-10-15 20:36 661C++ 对象的内存布局(上)<?xml:namespac ... -
C++ 对象的内存布局(下)
2008-10-15 20:59 939C++ 对象的内存布局(下)<?xml:namespac ... -
语言的歧义
2009-05-18 11:09 667语言的歧义 赵锟zhaokun.km (at)gmail.c ... -
6个变态的C语言写的Hello World
2009-05-26 15:52 838原文:http://cocre.com/?p=914 ... -
谁说C语言很简单?
2009-05-26 17:17 732原文:http://cocre.com/?p=873 ... -
经典的Hanoi问题 【函数的递归调用】
2009-05-19 17:24 935#include<stdio.h> void m ...
相关推荐
潜艇大战是一款经典的双人对战游戏,通过C语言实现,为初学者提供了很好的实践平台,同时也适合有一定编程基础的学习者深化理解C语言的控制结构、数据类型和函数应用。在这个项目中,我们可以学习到以下几个重要的...
潜艇大战游戏是一款经典的基于命令行界面的C语言编程游戏,其源代码的分析与学习能够帮助初学者深入了解C语言的基本语法、控制结构、函数运用以及简单的游戏逻辑设计。在这个游戏中,玩家需要操控自己的潜艇与电脑...
用C语言编的小游戏,画面比较差~~不过是在TC2.0下实现,也不容易~~
《C语言实战游戏:潜水艇大战》是一款基于C语言编程设计的模拟战争游戏,它将理论与实践相结合,旨在帮助学习者深入理解C语言的基本语法、数据结构、控制流程以及函数应用等核心概念。通过编写这个游戏,玩家可以...
潜艇大战游戏程序是一款基于C语言开发的经典游戏,它利用了DOS系统调用、图形库以及自定义的数据结构来实现游戏逻辑。以下是该程序中涉及的一些核心知识点: 1. **数据结构**: - `stBOMB` 结构体:表示鱼雷,包含...
《潜艇大战游戏代码》是一款基于C语言开发的初级游戏项目,旨在帮助初学者掌握C语言编程基础,并通过实际的游戏开发过程提升对编程的理解和实践能力。这款游戏的核心是模拟一场海底潜艇之间的战斗,玩家需要操控自己...
《潜艇大战游戏VC++源代码》是一款基于C++编程语言,使用Visual C++ 6.0编译器开发的游戏程序。这个游戏旨在展示基础的图形用户界面(GUI)设计、事件处理、对象编程以及简单的游戏逻辑。以下是游戏开发中的关键知识...
这是用C语言写的结合TC图形库写出来的潜水艇大战,大家可以从中学习学习~~~ 运行时别忘了修改初始化图形的地址:initgraph(&driver,&mode,address); 比如说我的 address=D:\\Win-TC\\projects, 因为要有EGAVGA.BGI...
从给定的文件信息来看,这是一段使用C语言编写的潜艇大战游戏的源代码。这份代码涵盖了游戏的初始化、图形界面的绘制、游戏逻辑处理等关键部分,展现了C语言在游戏开发中的应用。下面将根据这段代码的关键部分,详细...
本篇文章将深入探讨“水上潜艇大战”游戏的源代码,旨在帮助读者理解如何利用Delphi进行游戏开发,以及游戏中涉及的核心编程概念。 首先,"ships.aps"文件很可能是游戏中的资源文件,它可能包含了游戏中的船只模型...
《潜艇大战游戏》是一款基于C语言开发的经典游戏,它展示了C语言在编写简单游戏方面的应用。C语言是一种底层编程语言,以其高效、灵活性和广泛的应用范围而著名。在这个项目中,我们将探讨C语言的一些核心概念以及...
计算机技术基础(c语言)课程设计-潜艇大战.doc
《潜艇大战演示程序及源代码》是一个以C语言编写的程序示例,它为我们提供了一个了解C语言编程、游戏开发基础以及源代码分析的实践平台。在这个项目中,开发者通过C语言实现了一款简单的潜艇战斗游戏,让我们可以...
【C语言潜艇大战游戏设计】 本课程设计是基于C语言实现的一个简单潜艇大战游戏,旨在锻炼学生的编程能力和逻辑思维能力,同时涵盖了C语言的基础语法和常用控制结构的应用。以下是游戏设计的关键知识点: 1. **控制...
这款潜艇大战游戏展示了C语言结合图形库进行游戏开发的基础方法,涵盖了图形绘制、键盘输入处理、游戏逻辑控制等多个方面,是学习游戏编程的一个良好实践案例。通过这个游戏,开发者可以了解到如何利用结构体组织...
十个c语言案例 (1)贪吃蛇 (2)五子棋游戏 (3)电话薄管理系统 (4)计算器 (5)万年历 (6)电子表 (7)客户端和服务器通信 ...(8)潜艇大战游戏 (9)鼠标器程序 (10)手机通讯录系统
总的来说,《潜艇大战》是一款展示C语言游戏开发能力的作品。它融合了C语言的基础语法、控制流、数据结构和函数调用,以及Visual C++的图形编程技术。通过这个游戏,我们可以学习到如何用C语言编写交互式程序,以及...
97 潜水艇大战 98 机器人大战 99 图形模式下的搬运工 100 十全十美游戏 101 强大的通信录 102 模拟Windows下UltraEdit程序 103 轻松实现个人理财 104 竞技比赛打分系统 105 火车...