匿名用户

1级

2010-03-25 回答

可以学写“贪吃蛇”代码:

#include

#include

#include

#include

#include

#define W 78  //游戏框的宽,x轴

#define H 26  //游戏框的高,y轴

int dir=3;    //方向变量,初值3表示向“左”

int Flag=0;   //吃了食物的标志(1是0否)

int score=0;  //玩家得分

struct food{ int x;  //食物的x坐标

int y;  //食物的y坐标

}fod;  //结构体fod有2个成员

struct snake{ int len;  //蛇身长度

int speed; //速度

int x[100];

int y[100];

}snk;  //结构体snk有4个成员

void gtxy( int x,int y)  //控制光标移动的函数

{ COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

void gtxy( int x,int y);  //以下声明要用到的几个自编函数

void csh( );  //初始化界面

void keymove( ); //按键操作移动蛇

void putFod( );  //投放食物

int  Over( );   //游戏结束(1是0否)

void setColor(unsigned short p, unsigned short q); //设定显示颜色

int main( )   //主函数

{ csh( );

while(1)

{ Sleep(snk.speed);

keymove( );

putFod( );

if(Over( )) {system(“cls”);

gtxy(W/2+1,H/2); printf(“游戏结束!T__T”);

gtxy(W/2+1,H/2+2); printf(“玩家总分:%d分”,score);

getch( );  break;

}

}

return 0;

}

void csh( )  //初始化界面

{ int i;  gtxy(0,0);

CONSOLE_CURSOR_INFO cursor_info={1,0};  //以下两行是隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

for(i=0;i<=W;i=i+2)  //横坐标要为偶数,因为这个要打印的字符占2个位置

{ setColor(2, 0);  //设定打印颜色为绿字黑底

gtxy(i,0);  printf("■");  //打印上边框

gtxy(i,H); printf("■");  //打印下边框

}

for(i=1;i

{ gtxy(0,i); printf("■");  //打印左边框

gtxy(W,i); printf("■");  //打印右边框

}

while(1)

{ srand((unsigned)time(NULL));  //启动随机数发生器srand( )

fod.x=rand()%(W-4)+2;  //随机函数rand( )产生一个从0到比”(W-4)”小1的数再加2

fod.y=rand()%(H-2)+1;  //随机函数rand( )产生一个从0到比”(H-2)”小1的数再加1

if (fod.x%2==0) break;  //fod.x是食物的横坐标,要是2的倍数(为偶数)

}

setColor(12, 0);  //设定打印颜色为淡红字黑底

gtxy(fod.x,fod.y); printf("●");  //到食物坐标处打印初试食物

snk.len=3;      //蛇身长

snk.speed=350;  //刷新蛇的时间,即是移动速度

snk.x[0]=W/2+1;  //蛇头横坐标要为偶数(因为W/2=39)

snk.y[0]=H/2;    //蛇头纵坐标

setColor(9, 0);  //设定打印颜色为淡蓝字黑底

gtxy(snk.x[0], snk.y[0]);  printf("■");  //打印蛇头

for(i=1;i

{ snk.x[i]=snk.x[i-1]+2;  snk.y[i]=snk.y[i-1];

gtxy(snk.x[i],snk.y[i]);  printf("■");  //打印蛇身

}

setColor(7, 0);  //恢复默认的白字黑底

return;

}

void keymove( )  //按键操作移动蛇

{ int key;

if( kbhit( ) )    //如有按键输入才执行下面操作

{ key=getch( );

if (key==224)  //值为224表示按下了方向键,下面要再次获取键值

{ key=getch( );

if(key==72&&dir!=2)dir=1;  //72表示按下了向上方向键

if(key==80&&dir!=1)dir=2;  //80为向下

if(key==75&&dir!=4)dir=3;  //75为向左

if(key==77&&dir!=3)dir=4;  //77为向右

}

if (key==32)

{ while(1) if((key=getch( ))==32) break; }  //32为空格键,这儿用来暂停

}

if (Flag==0)  //如没吃食物,才执行下面操作擦掉蛇尾

{gtxy(snk.x[snk.len-1],snk.y[snk.len-1]);  printf("  "); }

int i;

for (i = snk.len - 1; i > 0; i--)  //从蛇尾起每节存储前一节坐标值(蛇头除外)

{ snk.x[i]=snk.x[i-1];  snk.y[i]=snk.y[i-1]; }

switch (dir)  //判断蛇头该往哪个方向移动,并获取最新坐标值

{ case 1: snk.y[0]--; break;   //dir=1要向上移动

case 2: snk.y[0]++; break;  //dir=2要向下移动

case 3: snk.x[0]-=2; break;  //dir=3要向左移动

case 4: snk.x[0]+=2; break;  //dir=4要向右移动

}

setColor(9, 0);

gtxy(snk.x[0], snk.y[0]); printf("■");  //打印蛇头

if (snk.x[0] == fod.x && snk.y[0] == fod.y)  //如吃到食物则执行以下操作

{ printf("\007"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; }//这007是响铃

else Flag = 0;  //没吃到食物Flag的值为0

if(snk.speed<150) snk.speed= snk.speed+5;  //作弊码,不让速度无限加快

}

void putFod( )  //投放食物

{ if (Flag == 1)  //如吃到食物才执行以下操作,生成另一个食物

{ while (1)

{ int i,n= 1;

srand((unsigned)time(NULL));  //启动随机数发生器srand( ),接下产生食物坐标值

fod.x = rand( ) % (W - 4) + 2;  //产生在游戏框范围内的一个x坐标值

fod.y = rand( ) % (H - 2) + 1;  //产生在游戏框范围内的一个y坐标值

for (i = 0; i < snk.len; i++)   //随机生成的食物不能在蛇的身体上

{ if (fod.x == snk.x[i] &&fod.y == snk.y[i]) { n= 0; break;} }

if (n && fod.x % 2 == 0) break;  //n不为0且横坐标为偶数,则食物坐标取值成功

}

setColor(12, 0);

gtxy(fod.x, fod.y);  printf("●");  //光标到取得的坐标处打印食物

}

return;

}

int Over( )  //判断游戏是否结束的函数

{ int  i;

setColor(7, 0);

gtxy(2,H+1); printf(“暂停键:space.”);  //以下打印一些其它信息

gtxy(2,H+2); printf(“游戏得分:%d”,score);

if (snk.x[0] == 0 || snk.x[0] == W) return 1;  //蛇头触碰左右边界

if (snk.y[0] == 0 || snk.y[0] == H) return 1;  //蛇头触碰上下边界

for (i = 1; i < snk.len; i++)

{ if (snk.x[0] == snk.x[i] && snk.y[0] == snk.y[i]) return 1; } //蛇头触碰自身

return 0;  //没碰到边界及自身时就返回0

}

void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)

{ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);

} //用来设定颜色的函数

简单的闪避游戏的c语言,谁有一些简单小游戏的C语言程序?相关推荐

  1. c语言射击类打飞机小游戏感悟

    c语言:简单飞机射击小游戏 使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,操作方法是"a""d""w"或者"←" ...

  2. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  3. c语言算24点答案,C语言-纸牌计算24点小游戏

    C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...

  4. c语言自动按键脚本,C语言键盘控制走迷宫小游戏

    本文实例为大家分享了C语言键盘控制走迷宫小游戏的具体代码,供大家参考,具体内容如下 在看了<啊哈C语言>之后想写一个游戏demo 游戏的截图 首先是启动界面 然后是初始化 接下来是键盘操控 ...

  5. c语言设置一个选择数字的程序,C语言编一个数字益智小游戏

    程序功能及运行情况 设计的程序是一个数字益智游戏,旨在培养小朋友玩家的数学思维,提高玩家的数学能力.游戏共设有四个不同的小游戏,分别是一位数四则运算.两位数四则运算.找最值游戏.排序游戏.程序能实现产 ...

  6. C语言射击类打飞机小游戏

    使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次机会. 在网上查询资料并且和同学讨论之后,对原来的代码有了一些改进, 改进:增加了颜色函数 ...

  7. c语言成语接龙编程,C语言完成成语接龙小游戏

    用C语言实现成语接龙小游戏(新手上路,大神勿喷) 1.首先需要找到一个成语库(从网上下载即可,保存为.txt文件) 2.整体思路如下 由于要用的成语保存在文件里,一边用一边读取会降低代码的效率,所以我 ...

  8. c语言贪吃蛇打包到桌面,C语言实现桌面贪吃蛇小游戏

    本篇写的是桌面贪吃蛇小游戏,大家自己看吧,感谢大家的支持,谢谢!O(∩_∩)O~~ #define _CRT_SECURE_NO_WARNINGS #include #include #include ...

  9. C语言接龙,C语言完成成语接龙小游戏

    用C语言实现成语接龙小游戏(新手上路,大神勿喷) 1.首先需要找到一个成语库(从网上下载即可,保存为.txt文件) 2.整体思路如下 由于要用的成语保存在文件里,一边用一边读取会降低代码的效率,所以我 ...

  10. C语言实现吃豆人小游戏(转载)

    c语言实现吃豆人小游戏(转载) 游戏内还有一些bug,凑活着来玩一玩吧! #include <stdio.h> #include <iostream> #include < ...

最新文章

  1. 实验电路的放大器伴侣:LMV358
  2. python画图代码彩虹-python绘制彩虹图
  3. 3.API的调用过程(保存现场)
  4. 实现接口java_Java – 实现接口
  5. 乐高无线服务器必须有房主,乐高无限成就有哪些-乐高无限成就大全_手心游戏...
  6. linux查看ip命令_不可不知的Linux文本查看命令
  7. 使用C#在应用程序间发送消息
  8. init与clinit 与 类的初始化顺序
  9. Assets Error Listings APP-OFA-XXXX (文档 ID 1460268.1)
  10. openssl_sign(): supplied key param cannot be coerced into a private key
  11. 前端实现扫码数据展示
  12. [Geek Challenge 2022]Web部分 writeup by q1jun
  13. 东北大学计算机学硕复试分数线,2020年东北大学学硕复试分数线
  14. (转)2008年精典骗术, 2009年你还会上当吗?
  15. 关于C#操作Word时的版本问题
  16. 云服务案例分析 BB平台 Quiz 2
  17. 关于“wining attitude”
  18. MCP2515调试笔记----初始化注意事项
  19. WordPress 7B2主题插件分享 – 动漫视频在线播放插件Selection
  20. vba复制整个sheet内容_VBA一键复制当前文件夹全部EXCEL里的工作表

热门文章

  1. 临床路径在中国的实施现状及路径产品发展前景
  2. LeetCode算法,每日一题,冲击阿里巴巴,day3
  3. 孔子怀疑徒弟(zt)
  4. 好用的数据备份与恢复软件推荐
  5. 无人机测绘技术在测绘领域的应用
  6. CentOS7安装quilt
  7. hnu 数字电路 实验2.4 4位先行进位加法器
  8. java 发票打印_Java发票打印CommPortIdentifier与无符号字节的问题
  9. 银联支付(2020)
  10. 那些年,我们一起追的女孩(简单介绍)