c语言游戏编程,下落的小鸟 求代码

c语言游戏编程,下落的小鸟 求代码,第1张

下落的小鸟

#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语言写的一个小型游戏 源代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9574010.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存