下落的小鸟
#include<stdioh>
#include<stdlibh>
#include<conioh>
#include<timeh>
#include<Windowsh>
int Grade = 1, Score = 0, Max_blank = 9, Distance = 18;
struct Birds{int x; int y;}; //定义一种Birds数据类型(含3个成员)
Birds Bird = (Birds)malloc(sizeof(Birds)); //定义Birds类型 指针变量Bird并赋初值
struct Bg{int x, y; int l_blank; Bg pri; Bg next;}; //定义一种Bg数据类型(含5个成员)
Bg Bg1 = (Bg)malloc(sizeof(Bg)); //定义Bg类型 指针变量Bg1并赋初值
void Position(int x, int y) //光标定位函数(用于指定位置输出)
{COORD pos = { x - 1, y - 1 };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos);
}
void Csh( ) //初始化界面
{
printf("══════════════════════════════════════\n");
printf(" ■■ ■■ C语言版 Flappy Bird \n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■ 瞎搞人:yyposs原创\n");
printf(" ■■ ■■ 瞎搞日期:20142\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■ 改编:鸣蝉百20217\n");
printf(" ■■ ■■ *** 作:按向上方向键让小鸟起飞\n");
printf(" ■■\n");
printf(" ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■\n");
printf(" ■■ ■■ DEVc++运行通过\n");
printf("══════════════════════════════════════\n");
printf(" 按键继续…");
getch( );
system("cls");
}
void PrFK( ) //输出方框(游戏范围区)
{int i;
Position(1, 1); printf("╔"); Position(79, 1); printf("╗");
Position(1, 24); printf("╚"); Position(79, 24); printf("╝");
for (i = 3; i <= 78; i += 2){Position(i, 1); printf("═"); Position(i, 24); printf("═");}
for(i=2;i<=23;i++)
{ Position(1,i); printf("║");if(i<11)printf("0%d",i-1);else printf("%d",i-1);
Position(79,i); printf("║");
}
Position(4, 25); printf("小鸟即将出现,请准备按键起飞… ");
getch( );
Position(4, 25); printf(" ");
}
void CreatBg( ) //创建障碍物坐标(便于打印输出)
{Bg Bg2 = (Bg)malloc(sizeof(Bg));
Bg1->x = 90; Bg1->y = 8; //确定障碍物的一对基本坐标(此时值是在游戏框之外)
Bg2->x = Bg1->x + Distance; Bg2->y = 9; //下一障碍物的基本坐标x、y
Bg1->l_blank = Max_blank - Grade; //障碍物上下两部分之间的空白距离l_blank
Bg2->l_blank = Max_blank - Grade;
Bg1->next = Bg2; Bg1->pri = Bg2;
Bg2->next = Bg1; Bg2->pri = Bg1;
}
void InsertBg(Bg p) //随机改变障碍物的y坐标,让空白通道有上下变化
{int temp;
Bg Bgs = (Bg)malloc(sizeof(Bg));
Bgs->x = p->pri->x + Distance;
Bgs->l_blank = Max_blank - Grade;
srand((int)time(0)); //启动随机数发生器
temp = rand( ); //产生一个随机数并赋值给temp
if (temp % 2 == 0)
{if ((temp % 4 + p->pri->y + Max_blank - Grade)<21)
Bgs->y = p->pri->y + temp % 4;
else Bgs->y = p->pri->y;
}
else
{if ((p->pri->y - temp % 4)>2)Bgs->y = p->pri->y - temp % 4;
else Bgs->y = p->pri->y;
}
Bgs->pri = p->pri; Bgs->next = p;
p->pri->next = Bgs; p->pri = Bgs;
}
void CreatBird( ) //建立小鸟的坐标(初始打印输出小鸟的位置)
{Bird->x = 41; Bird->y = 10;}
int CheckYN(Bg q) //判断游戏结束与否(值为0是要结束,为1没有要结束)
{Bg p = q; int i = 0;
while (++i <= 5)
{if (Bird->y>23)return 0;
if (Bird->x == p->x&&Bird->y <= p->y)return 0;
if ((Bird->x == p->x || Bird->x == p->x + 1 || Bird->x == p->x + 2) && Bird->y == p->y)return 0;
if (Bird->x == p->x&&Bird->y>p->y + p->l_blank)return 0;
if ((Bird->x == p->x || Bird->x == p->x + 1 || Bird->x == p->x + 2) && Bird->y == p->y + p->l_blank)
return 0;
p = p->next;
}
return 1;
}
void Check_Bg(Bg q) //核查开头的障碍物坐标是否在游戏区内
{Bg p = q; int i = 0, temp;
while (++i <= 5)
{if (p->x>-4)p = p->next;
else
{srand((int)time(0)); temp = rand();
if (temp % 2 == 0)
{if ((temp % 4 + p->y + Max_blank - Grade)<21)p->y = p->y + temp % 4;
else p->y = p->y; p->x = p->pri->x + Distance;
p->l_blank = Max_blank - Grade;
}
else
{if ((p->y - temp % 4)>2)p->y = p->y - temp % 4;
else p->y = p->y; p->x = p->pri->x + Distance;
p->l_blank = Max_blank - Grade;
}
}
}
}
void Prt_Bg(Bg q) //打印输出障碍物(依据其x、y坐标进行相应输出)
{Bg p = q; int i = 0, k, j;
while (++i <= 5)
{if (p->x>0 && p->x <= 78)
{for (k = 2; k<p->y; k++){Position(p->x + 1, k); printf("■"); printf("■"); printf(" ");}
Position(p->x, p->y);
printf("■"); printf("■"); printf("■"); printf(" ");
Position(p->x, p->y + p->l_blank);
printf("■"); printf("■"); printf("■"); printf(" ");
k = k + p->l_blank + 1;
for (k; k <= 23; k++){Position(p->x + 1, k); printf("■"); printf("■"); printf(" ");}
}
p = p->next;
if (p->x == 0)
{for (j = 2; j<p->y; j++){Position(p->x + 1, j); printf(" "); printf(" ");}
Position(p->x + 1, p->y);
printf(" "); printf(" "); printf(" ");
Position(p->x + 1, p->y + Max_blank - Grade);
printf(" "); printf(" "); printf(" ");
j = j + Max_blank - Grade + 1;
for (j; j <= 22; j++){Position(p->x + 1, j); printf(" "); printf(" ");}
}
}
}
void PrtBird( ) //打印输出小鸟
{Position(Bird->x, Bird->y - 1); printf(" ");
Position(Bird->x, Bird->y); printf("Ю");
Position(38, 2); printf("Score:%d", Score);
}
void Loop_Bg(Bg q) //障碍物x坐标左移,并记录成绩
{Bg p = q; int i = 0;
while (++i <= 5)
{p->x = p->x - 1; p = p->next;
if (Bird->x == p->x)
{Score += 1;
if (Score % 4 == 0 && Grade<4)Grade++;
}
}
}
int main( )
{int i = 0; int t;
while (1)
{
Csh( );PrFK( );CreatBg( );
InsertBg(Bg1);InsertBg(Bg1);InsertBg(Bg1);
CreatBird( );
while (1)
{if (!CheckYN(Bg1))break;
Check_Bg(Bg1);Prt_Bg(Bg1);
PrtBird( );Loop_Bg(Bg1);
Bird->y = Bird->y + 1;
if (GetAsyncKeyState(VK_UP)) //按下了向上方向键
{Position(Bird->x, Bird->y - 1);printf(" ");
Bird->y = Bird->y - 4;
}
Sleep(200); //程序延时200毫秒(数值大小决定游戏速度快慢)
i = 0;
}
Position(6, 25);
printf("游戏结束! 请输入:0退出 1重玩");
scanf("%d",&t);
if (t==0)break;
system("cls"); Score = 0;
}
return 0;
}
扫雷 #include <graphicsh>
#include <stdlibh>
#include <dosh>
#define LEFTPRESS 0xff01
#define LEFTCLICK 0xff10
#define LEFTDRAG 0xff19
#define MOUSEMOVE 0xff08
struct
{
int num;/格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子/
int roundnum;/统计格子周围有多少雷/
int flag;/右键按下显示红旗的标志,0没有红旗标志,1有红旗标志/
}Mine[10][10];
int gameAGAIN=0;/是否重来的变量/
int gamePLAY=0;/是否是第一次玩游戏的标志/
int mineNUM;/统计处理过的格子数/
char randmineNUM[3];/显示数字的字符串/
int Keystate;
int MouseExist;
int MouseButton;
int MouseX;
int MouseY;
void Init(void);/图形驱动/
void MouseOn(void);/鼠标光标显示/
void MouseOff(void);/鼠标光标隐藏/
void MouseSetXY(int,int);/设置当前位置/
int LeftPress(void);/左键按下/
int RightPress(void);/鼠标右键按下/
void MouseGetXY(void);/得到当前位置/
void Control(void);/游戏开始,重新,关闭/
void GameBegain(void);/游戏开始画面/
void DrawSmile(void);/画笑脸/
void DrawRedflag(int,int);/显示红旗/
void DrawEmpty(int,int,int,int);/两种空格子的显示/
void GameOver(void);/游戏结束/
void GameWin(void);/显示胜利/
int MineStatistics(int,int);/统计每个格子周围的雷数/
int ShowWhite(int,int);/显示无雷区的空白部分/
void GamePlay(void);/游戏过程/
void Close(void);/图形关闭/
void main(void)
{
Init();
Control();
Close();
}
void Init(void)/图形开始/
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
}
void Close(void)/图形关闭/
{
closegraph();
}
void MouseOn(void)/鼠标光标显示/
{
_AX=0x01;
geninterrupt(0x33);
}
void MouseOff(void)/鼠标光标隐藏/
{
_AX=0x02;
geninterrupt(0x33);
}
void MouseSetXY(int x,int y)/设置当前位置/
{
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
}
int LeftPress(void)/鼠标左键按下/
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&1);
}
int RightPress(void)/鼠标右键按下/
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&2);
}
void MouseGetXY(void)/得到当前位置/
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_CX;
MouseY=_DX;
}
void Control(void)/游戏开始,重新,关闭/
{
int gameFLAG=1;/游戏失败后判断是否重新开始的标志/
while(1)
{
if(gameFLAG)/游戏失败后没判断出重新开始或者退出游戏的话就继续判断/
{
GameBegain(); /游戏初始画面/
GamePlay();/具体游戏/
if(gameAGAIN==1)/游戏中重新开始/
{
gameAGAIN=0;
continue;
}
}
MouseOn();
gameFLAG=0;
if(LeftPress())/判断是否重新开始/
{
MouseGetXY();
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)
{
gameFLAG=1;
continue;
}
}
if(kbhit())/判断是否按键退出/
break;
}
MouseOff();
}
void DrawSmile(void)/画笑脸/
{
setfillstyle(SOLID_FILL,YELLOW);
fillellipse(290,75,10,10);
setcolor(YELLOW);
setfillstyle(SOLID_FILL,BLACK);/眼睛/
fillellipse(285,75,2,2);
fillellipse(295,75,2,2);
setcolor(BLACK);/嘴巴/
bar(287,80,293,81);
}
void DrawRedflag(int i,int j)/显示红旗/
{
setcolor(7);
setfillstyle(SOLID_FILL,RED);
bar(198+j20,95+i20,198+j20+5,95+i20+5);
setcolor(BLACK);
line(198+j20,95+i20,198+j20,95+i20+10);
}
void DrawEmpty(int i,int j,int mode,int color)/两种空格子的显示/
{
setcolor(color);
setfillstyle(SOLID_FILL,color);
if(mode==0)/没有单击过的大格子/
bar(200+j20-8,100+i20-8,200+j20+8,100+i20+8);
else
if(mode==1)/单击过后显示空白的小格子/
bar(200+j20-7,100+i20-7,200+j20+7,100+i20+7);
}
void GameBegain(void)/游戏开始画面/
{
int i,j;
cleardevice();
if(gamePLAY!=1)
{
MouseSetXY(290,70); /鼠标一开始的位置,并作为它的初始坐标/
MouseX=290;
MouseY=70;
}
gamePLAY=1;/下次按重新开始的话鼠标不重新初始化/
mineNUM=0;
setfillstyle(SOLID_FILL,7);
bar(190,60,390,290);
for(i=0;i<10;i++)/画格子/
for(j=0;j<10;j++)
DrawEmpty(i,j,0,8);
setcolor(7);
DrawSmile();/画脸/
randomize();
for(i=0;i<10;i++)/100个格子随机赋值有没有地雷/
for(j=0;j<10;j++)
{
Mine[i][j]num=random(8);/如果随机数的结果是1表示这个格子有地雷/
if(Mine[i][j]num==1)
mineNUM++;/现有雷数加1/
else
Mine[i][j]num=2;
Mine[i][j]flag=0;/表示没红旗标志/
}
sprintf(randmineNUM,"%d",mineNUM); /显示这次总共有多少雷数/
setcolor(1);
settextstyle(0,0,2);
outtextxy(210,70,randmineNUM);
mineNUM=100-mineNUM;/变量取空白格数量/
MouseOn();
}
void GameOver(void)/游戏结束画面/
{
int i,j;
setcolor(0);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if(Mine[i][j]num==1)/显示所有的地雷/
{
DrawEmpty(i,j,0,RED);
setfillstyle(SOLID_FILL,BLACK);
fillellipse(200+j20,100+i20,7,7);
}
}
void GameWin(void)/显示胜利/
{
setcolor(11);
settextstyle(0,0,2);
outtextxy(230,30,"YOU WIN!");
}
int MineStatistics(int i,int j)/统计每个格子周围的雷数/
{
int nNUM=0;
if(i==0&&j==0)/左上角格子的统计/
{
if(Mine[0][1]num==1)
nNUM++;
if(Mine[1][0]num==1)
nNUM++;
if(Mine[1][1]num==1)
nNUM++;
}
else
if(i==0&&j==9)/右上角格子的统计/
{
if(Mine[0][8]num==1)
nNUM++;
if(Mine[1][9]num==1)
nNUM++;
if(Mine[1][8]num==1)
nNUM++;
}
else
if(i==9&&j==0)/左下角格子的统计/
{
if(Mine[8][0]num==1)
nNUM++;
if(Mine[9][1]num==1)
nNUM++;
if(Mine[8][1]num==1)
nNUM++;
}
else
if(i==9&&j==9)/右下角格子的统计/
{
if(Mine[9][8]num==1)
nNUM++;
if(Mine[8][9]num==1)
nNUM++;
if(Mine[8][8]num==1)
nNUM++;
}
else if(j==0)/左边第一列格子的统计/
{
if(Mine[i][j+1]num==1)
nNUM++;
if(Mine[i+1][j]num==1)
nNUM++;
if(Mine[i-1][j]num==1)
nNUM++;
if(Mine[i-1][j+1]num==1)
nNUM++;
if(Mine[i+1][j+1]num==1)
nNUM++;
}
else if(j==9)/右边第一列格子的统计/
{
if(Mine[i][j-1]num==1)
nNUM++;
if(Mine[i+1][j]num==1)
nNUM++;
if(Mine[i-1][j]num==1)
nNUM++;
if(Mine[i-1][j-1]num==1)
nNUM++;
if(Mine[i+1][j-1]num==1)
nNUM++;
}
else if(i==0)/第一行格子的统计/
{
if(Mine[i+1][j]num==1)
nNUM++;
if(Mine[i][j-1]num==1)
nNUM++;
if(Mine[i][j+1]num==1)
nNUM++;
if(Mine[i+1][j-1]num==1)
nNUM++;
if(Mine[i+1][j+1]num==1)
nNUM++;
}
else if(i==9)/最后一行格子的统计/
{
if(Mine[i-1][j]num==1)
nNUM++;
if(Mine[i][j-1]num==1)
nNUM++;
if(Mine[i][j+1]num==1)
nNUM++;
if(Mine[i-1][j-1]num==1)
nNUM++;
if(Mine[i-1][j+1]num==1)
nNUM++;
}
else/普通格子的统计/
{
if(Mine[i-1][j]num==1)
nNUM++;
if(Mine[i-1][j+1]num==1)
nNUM++;
if(Mine[i][j+1]num==1)
nNUM++;
if(Mine[i+1][j+1]num==1)
nNUM++;
if(Mine[i+1][j]num==1)
nNUM++;
if(Mine[i+1][j-1]num==1)
nNUM++;
if(Mine[i][j-1]num==1)
nNUM++;
if(Mine[i-1][j-1]num==1)
nNUM++;
}
return(nNUM);/把格子周围一共有多少雷数的统计结果返回/
}
int ShowWhite(int i,int j)/显示无雷区的空白部分/
{
if(Mine[i][j]flag==1||Mine[i][j]num==0)/如果有红旗或该格处理过就不对该格进行任何判断/
return;
mineNUM--;/显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利/
if(Mine[i][j]roundnum==0&&Mine[i][j]num!=1)/显示空格/
{
DrawEmpty(i,j,1,7);
Mine[i][j]num=0;
}
else
if(Mine[i][j]roundnum!=0)/输出雷数/
{
DrawEmpty(i,j,0,8);
sprintf(randmineNUM,"%d",Mine[i][j]roundnum);
setcolor(RED);
outtextxy(195+j20,95+i20,randmineNUM);
Mine[i][j]num=0;/已经输出雷数的格子用0表示已经用过这个格子/
return ;
}
/8个方向递归显示所有的空白格子/
if(i!=0&&Mine[i-1][j]num!=1)
ShowWhite(i-1,j);
if(i!=0&&j!=9&&Mine[i-1][j+1]num!=1)
ShowWhite(i-1,j+1);
if(j!=9&&Mine[i][j+1]num!=1)
ShowWhite(i,j+1);
if(j!=9&&i!=9&&Mine[i+1][j+1]num!=1)
ShowWhite(i+1,j+1);
if(i!=9&&Mine[i+1][j]num!=1)
ShowWhite(i+1,j);
if(i!=9&&j!=0&&Mine[i+1][j-1]num!=1)
ShowWhite(i+1,j-1);
if(j!=0&&Mine[i][j-1]num!=1)
ShowWhite(i,j-1);
if(i!=0&&j!=0&&Mine[i-1][j-1]num!=1)
ShowWhite(i-1,j-1);
}
void GamePlay(void)/游戏过程/
{
int i,j,Num;/Num用来接收统计函数返回一个格子周围有多少地雷/
for(i=0;i<10;i++)
for(j=0;j<10;j++)
Mine[i][j]roundnum=MineStatistics(i,j);/统计每个格子周围有多少地雷/
while(!kbhit())
{
if(LeftPress())/鼠标左键盘按下/
{
MouseGetXY();
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)/重新来/
{
MouseOff();
gameAGAIN=1;
break;
}
if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/当前鼠标位置在格子范围内/
{
j=(MouseX-190)/20;/x坐标/
i=(MouseY-90)/20;/y坐标/
if(Mine[i][j]flag==1)/如果格子有红旗则左键无效/
continue;
if(Mine[i][j]num!=0)/如果格子没有处理过/
{
if(Mine[i][j]num==1)/鼠标按下的格子是地雷/
{
MouseOff();
GameOver();/游戏失败/
break;
}
else/鼠标按下的格子不是地雷/
{
MouseOff();
Num=MineStatistics(i,j);
if(Num==0)/周围没地雷就用递归算法来显示空白格子/
ShowWhite(i,j);
else/按下格子周围有地雷/
{
sprintf(randmineNUM,"%d",Num);/输出当前格子周围的雷数/
setcolor(RED);
outtextxy(195+j20,95+i20,randmineNUM);
mineNUM--;
}
MouseOn();
Mine[i][j]num=0;/点过的格子周围雷数的数字变为0表示这个格子已经用过/
if(mineNUM<1)/胜利了/
{
GameWin();
break;
}
}
}
}
}
if(RightPress())/鼠标右键键盘按下/
{
MouseGetXY();
if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/当前鼠标位置在格子范围内/
{
j=(MouseX-190)/20;/x坐标/
i=(MouseY-90)/20;/y坐标/
MouseOff();
if(Mine[i][j]flag==0&&Mine[i][j]num!=0)/本来没红旗现在显示红旗/
{
DrawRedflag(i,j);
Mine[i][j]flag=1;
}
else
if(Mine[i][j]flag==1)/有红旗标志再按右键就红旗消失/
{
DrawEmpty(i,j,0,8);
Mine[i][j]flag=0;
}
}
MouseOn();
sleep(1);
}
}
}
"扫雷"小游戏C代码
#include<stdioh>
#include<mathh>
#include<timeh>
#include<stdlibh>
main( )
{char a[102][102],b[102][102],c[102][102],w;
int i,j; /循环变量/
int x,y,z[999]; /雷的位置/
int t,s; /标记/
int m,n,lei; /计数/
int u,v; /输入/
int hang,lie,ge,mo; /自定义变量/
srand((int)time(NULL)); /启动随机数发生器/
leb1: /选择模式/
printf("\n 请选择模式:\n 1标准 2自定义\n");
scanf("%d",&mo);
if(mo==2) /若选择自定义模式,要输入三个参数/
{do
{t=0; printf("请输入\n行数 列数 雷的个数\n");
scanf("%d%d%d",&hang,&lie,&ge);
if(hang<2){printf("行数太少\n"); t=1;}
if(hang>100){printf("行数太多\n");t=1;}
if(lie<2){printf("列数太少\n");t=1;}
if(lie>100){printf("列数太多\n");t=1;}
if(ge<1){printf("至少要有一个雷\n");t=1;}
if(ge>=(hanglie)){printf("雷太多了\n");t=1;}
}while(t==1);
}
else{hang=10,lie=10,ge=10;} /否则就是选择了标准模式(默认参数)/
for(i=1;i<=ge;i=i+1) /确定雷的位置/
{do
{t=0; z[i]=rand( )%(hanglie);
for(j=1;j<i;j=j+1){if(z[i]==z[j]) t=1;}
}while(t==1);
}
for(i=0;i<=hang+1;i=i+1) /初始化a,b,c/
{for(j=0;j<=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }
for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1) {a[i][j]='+';} }
for(i=1;i<=ge;i=i+1) /把雷放入c/
{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}
for(i=1;i<=hang;i=i+1) /计算b中数字/
{for(j=1;j<=lie;j=j+1)
{m=48;
if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;
if(c[i-1][j]=='#')m=m+1; if(c[i+1][j+1]=='#')m=m+1;
if(c[i][j+1]=='#')m=m+1; if(c[i+1][j]=='#')m=m+1;
if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;
b[i][j]=m;
}
}
for(i=1;i<=ge;i=i+1) /把雷放入b中/
{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}
lei=ge; /以下是游戏设计/
do
{leb2: /输出/
system("cls");printf("\n\n\n\n");
printf(" ");
for(i=1;i<=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c ",w);
}
printf("\n |");
for(i=1;i<=lie;i=i+1){printf("---|");}
printf("\n");
for(i=1;i<=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')printf(" |");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei);
printf("\n |");
for(j=1;j<=lie;j=j+1){printf("---|");}
printf("\n");
}
scanf("%d%c%d",&u,&w,&v); /输入/
u=u+1,v=v+1;
if(w!='#'&&a[u][v]=='@')
goto leb2;
if(w=='#')
{if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}
else if(a[u][v]=='@'){a[u][v]=''; lei=lei+1;}
else if(a[u][v]==''){a[u][v]='+';}
goto leb2;
}
a[u][v]=b[u][v];
leb3: /打开0区/
t=0;
if(a[u][v]=='0')
{for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i<=hang;i=i+1)
{for(j=lie;j>=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i>=1;i=i-1)
{for(j=1;j<=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i>=1;i=i-1)
{for(j=lie;j>=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1; if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i<=hang;i=i+1) /检测0区/
{for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')
{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='')t=1;
if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='')t=1;
if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='')t=1;
if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='')t=1;
if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='')t=1;
if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='')t=1;
if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='')t=1;
if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='')t=1;
}
}
}
if(t==1)goto leb3;
}
n=0; /检查结束/
for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1)
{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='')n=n+1;}
}
}
while(a[u][v]!='#'&&n!=(hanglie-ge));
for(i=1;i<=ge;i=i+1) /游戏结束/
{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }
printf(" ");
for(i=1;i<=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c ",w);
}
printf("\n |");
for(i=1;i<=lie;i=i+1){printf("---|");}
printf("\n");
for(i=1;i<=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')printf(" |");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei); printf("\n |");
for(j=1;j<=lie;j=j+1) {printf("---|");}
printf("\n");
}
if(n==(hanglie-ge)) printf("你成功了!\n");
else printf(" 游戏结束!\n");
printf(" 重玩请输入1\n");
t=0;
scanf("%d",&t);
if(t==1)goto leb1;
}
/注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入0a9三个字符再按回车键。3行7列不是雷,则输入3a7回车;第8行第5列是雷,就输入8#5回车,9行0列是雷则输入9#0并回车/
我的楼主可以自己玩一下
试试吧
#define N 200
#include <graphicsh>
#include <stdlibh>
#include <dosh>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/得分/
int gamespeed=50000;/游戏速度自己调整/
struct Food
{
int x;/食物的横坐标/
int y;/食物的纵坐标/
int yes;/判断是否要出现食物的变量/
}food;/食物的结构体/
struct Snake
{
int x[N];
int y[N];
int node;/蛇的节数/
int direction;/蛇移动方向/
int life;/ 蛇的生命,0活着,1死亡/
}snake;
void Init(void);/图形驱动/
void Close(void);/图形结束/
void DrawK(void);/开始画面/
void GameOver(void);/结束游戏/
void GamePlay(void);/玩游戏具体过程/
void PrScore(void);/输出成绩/
/主函数/
void main(void)
{
Init();/图形驱动/
DrawK();/开始画面/
GamePlay();/玩游戏具体过程/
Close();/图形结束/
}
/图形驱动/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙/
void DrawK(void)
{
/setbkcolor(LIGHTGREEN);/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/设置线型/
for(i=50;i<=600;i+=10)/画围墙/
{
rectangle(i,40,i+10,49); /上边/
rectangle(i,451,i+10,460);/下边/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /左边/
rectangle(601,i,610,i+10);/右边/
}
}
/玩游戏具体过程/
void GamePlay(void)
{
randomize();/随机数发生器/
foodyes=1;/1表示需要出现新食物,0表示已经存在食物/
snakelife=0;/活着/
snakedirection=1;/方向往右/
snakex[0]=100;snakey[0]=100;/蛇头/
snakex[1]=110;snakey[1]=100;
snakenode=2;/节数/
PrScore();/输出得分/
while(1)/可以重复玩游戏,压ESC键结束/
{
while(!kbhit())/在没有按键的情况下,蛇自己移动身体/
{
if(foodyes==1)/需要出现新食物/
{
foodx=rand()%400+60;
foody=rand()%350+60;
while(foodx%10!=0)/食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到/
foodx++;
while(foody%10!=0)
foody++;
foodyes=0;/画面上有食物了/
}
if(foodyes==0)/画面上有食物了就要显示/
{
setcolor(GREEN);
rectangle(foodx,foody,foodx+10,foody-10);
}
for(i=snakenode-1;i>0;i--)/蛇的每个环节往前移动,也就是贪吃蛇的关键算法/
{
snakex[i]=snakex[i-1];
snakey[i]=snakey[i-1];
}
/1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/
switch(snakedirection)
{
case 1:snakex[0]+=10;break;
case 2: snakex[0]-=10;break;
case 3: snakey[0]-=10;break;
case 4: snakey[0]+=10;break;
}
for(i=3;i<snakenode;i++)/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来/
{
if(snakex[i]==snakex[0]&&snakey[i]==snakey[0])
{
GameOver();/显示失败/
snakelife=1;
break;
}
}
if(snakex[0]<55||snakex[0]>595||snakey[0]<55||
snakey[0]>455)/蛇是否撞到墙壁/
{
GameOver();/本次游戏结束/
snakelife=1; /蛇死/
}
if(snakelife==1)/以上两种判断以后,如果蛇死就跳出内循环,重新开始/
break;
if(snakex[0]==foodx&&snakey[0]==foody)/吃到食物以后/
{
setcolor(0);/把画面上的食物东西去掉/
rectangle(foodx,foody,foodx+10,foody-10);
snakex[snakenode]=-20;snakey[snakenode]=-20;
/新的一节先放在看不见的位置,下次循环就取前一节的位置/
snakenode++;/蛇的身体长一节/
foodyes=1;/画面上需要出现新的食物/
score+=10;
PrScore();/输出新得分/
}
setcolor(4);/画出蛇/
for(i=0;i<snakenode;i++)
rectangle(snakex[i],snakey[i],snakex[i]+10,
snakey[i]-10);
delay(gamespeed);
setcolor(0);/用黑色去除蛇的的最后一节/
rectangle(snakex[snakenode-1],snakey[snakenode-1],
snakex[snakenode-1]+10,snakey[snakenode-1]-10);
} /endwhile(!kbhit)/
if(snakelife==1)/如果蛇死就跳出循环/
break;
key=bioskey(0);/接收按键/
if(key==ESC)/按ESC键退出/
break;
else
if(key==UP&&snakedirection!=4)
/判断是否往相反的方向移动/
snakedirection=3;
else
if(key==RIGHT&&snakedirection!=2)
snakedirection=1;
else
if(key==LEFT&&snakedirection!=1)
snakedirection=2;
else
if(key==DOWN&&snakedirection!=3)
snakedirection=4;
}/endwhile(1)/
}
/游戏结束/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/输出成绩/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/图形结束/
void Close(void)
{
getch();
closegraph();
}
#include <stdioh>#define MAX 100typedef enum BOOL{ FALSE = 0, TRUE = 1 }BOOL。
typedef union Items{struct {char boy : 1;char girl : 1;char boys)。
语言特点
主要特点
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建。
通过指针类型更可对内存直接寻址以及对硬件进行直接 *** 作,因此既能够用于开发系统程序,也可用于开发应用软件。通过对C语言进行研究分析,总结出其主要特点如下:
(1)简洁的语言
C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。
实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
(2)具有结构化的控制语句
C语言是一种结构化的语言,提供的控制语句具有结构化特征,如for语句、ifelse语句和switch语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。
(3)丰富的数据类型
C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。
百度百科-C语音
以上就是关于c语言游戏编程,下落的小鸟 求代码全部的内容,包括:c语言游戏编程,下落的小鸟 求代码、C语言 游戏 代码、(完整word版)纯C语言写的一个小型游戏 源代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)