怎样用C语言编写一个小游戏?

“贪吃蛇”C代码:

#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 );

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

#include

#include

#include "windows.h"

void gotoxy(int x,int y) /*定义gotoxy函数*/

COORD c;

c.X=x-1;

c.Y=y-1;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);

int main()

struct point

int x, y;/*该点的位置,包括x坐标和y坐标*/

int xv, yv;/*该点在x轴,y轴的速度*/

}man;

long p;

man.x=man.y=20;

man.xv=man.yv=1;

system("cls");

p=1000000000000000;

while(p--)

if(p%50000)

continue;

gotoxy(man.x, man.y);/*把光标移到指定的坐标*/

printf(" ");/*输出一个空格,把先前的字符擦去*/

man.x += man.xv;/*水平方向按x轴的速度运动*/

man.y += man.yv;/*垂直方向按y轴的速度运动*/

if(man.x==0||man.x==80)

man.xv*=-1;

if(man.y==0||man.y==80)

man.yv*=-1;

gotoxy(man.x, man.y);

printf("%c\b", 2); /*输出ASCII码值为2的"笑脸"字符*/

getchar ();

return 0;

这个是一个会动的笑脸,你可以从最简单开始

求各种C语言编程小游戏,越多越好,多了会有加分

C语言数字记忆小游戏,望采纳

#include

#include

#include

#include

#define TURE 1

#define FALSE 0

void main()

char another_name='Y';

char another_game='Y';

int correct='TRUE';

int counter=0;

int sequence_length=0;

int i=0;

long int seed=0;

int number=0;

long int now=0;

long time_taken=0;

int clock_per_sec;

printf("\n---------------------------------记忆小游戏--------------------------------------------\n");

printf("请牢记屏幕上出现的没一个数字,并在规定时间内输入您记下的数字。\n");

printf("回车开始游戏。\n");

scanf("%c",&another_game);

correct='TRUE';

counter=0;

sequence_length=2;

time_taken=clock();

while(correct)

sequence_length+=(counter++%3==0);

seed=time(NULL);

now=clock();

srand((int)seed);

for(i=0;i<=sequence_length;i++)

printf("%d",rand()%10);

for(;clock()-now

printf("\r");

for(i=0;i<=sequence_length;i++)

printf("");

if(counter==1)

printf("\n输入您记住的数字,以空格隔开。\n");

printf("\r");

srand((int)seed);

for(i=0;i<=sequence_length;i++)

scanf("%d",&number);

if(number!=rand()%10)

correct=FALSE;

break;

printf("%s\n",correct?"正确!":"错误!");

time_taken=(clock()-time_taken)/clock_per_sec;

printf("\n您的成绩是:%d",--counter*100/time_taken);

fflush(stdin);

printf("\n是否继续游戏?(Y/N)?\n");

scanf("%c",&another_game);

while(another_game=='y'||another_game=='Y');

}小子vsdgfwet我在linux下的gcc中未通过编译~

main.c:(.text+0x5f): undefined reference to `sqrt'

main.c:(.text+0xf6): undefined reference to `sqrt'

main.c:(.text+0x13b): undefined reference to `sqrt'

main.c:(.text+0x1d0): undefined reference to `sqrt'

main.c:(.text+0x2b1): undefined reference to `sqrt'

/tmp/ccrcnqbc.o:main.c:(.text+0x336): more undefined references to `sqrt' follow collect2: ld returned 1 exit status

好像没定义sqrt~

c语言小游戏(c语言小游戏代码飞机大战)相关推荐

  1. pygame小项目 ~ 3 :Python完成简易飞机大战

    pygame小项目 ~ 3 :Python完成简易飞机大战 子弹 敌机 我方战斗机全部采用图片 子弹击中和战斗机被击中全部采用碰撞检测 游戏的主函数代码 import spite from spite ...

  2. Unity游戏开发官方入门教程:飞机大战(六)——创建子弹

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  3. Unity游戏开发官方入门教程:飞机大战(二)——创建飞船对象

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  4. Unity游戏开发官方入门教程:飞机大战(五)——实现飞船控制脚本

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  5. Unity游戏开发官方入门教程:飞机大战(十)——敌人的爆炸和移动

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  6. python做飞机大战游戏单机_Python制作简易版飞机大战小游戏

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 相关文件 欢迎与我交流 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即 ...

  7. 雷电飞机大战游戏|基于Java开发实现雷电飞机大战游戏

    作者主页:编程千纸鹤 作者简介:Java.前端.Pythone开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发.毕业设计开发.面试技术整理.最新技术分享 收藏点赞不迷路  关注作者有好 ...

  8. Cocos2d-x3.X入门游戏实例(一) 经典飞机大战开发笔记

    有一个多月没有写学习笔记了,主要是在学习了一段时间后觉得想整个小游戏,选来选去选择了微信飞机大战作为处女作.飞机大战内容简单,比较适合刚学习Cocos2dx的新手拿来练手,而且网上的教程和源码都很多, ...

  9. java基础小项目_java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天 一.关键问题(理论): 1.简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系 2.简述Hero类构造 ...

最新文章

  1. C#让windows程序只运行一次
  2. 一款蓝牙音频无线传输设备上拆下的光电管
  3. 常见的服务器内存浅析
  4. Actuator 端点监控
  5. nyoj 1261 音痴又音痴的LT(离散化+树状数组求K小数)
  6. boost::fusion::as_set用法的测试程序
  7. GP两种连接方式性能测试
  8. DevExperience(1710)
  9. python的简单程序代码_小白学编程?从一个简单的程序开始学习Python编程
  10. 计算机教育工作,计算机教育教学工作总结
  11. Asp.net Core之TagHelper
  12. java软件工程师是做什么的_JAVA软件工程师是做什么的?
  13. SD--定价过程的16个字段的作用说明
  14. infor wms 中英文对照_视听盛宴 I纸牌屋揭露美国政治权力运作(16中英、纯英、无字幕可切换视频+中英文全剧本+全季音频)...
  15. clickhouse表引擎-合并树系列
  16. 秘鲁地震与Stallman失踪之谜
  17. 如何用python批量识别图片上的文字(一)
  18. 解析Kafka中的 Topic 和 Partition
  19. 驱动LSM6DS3TR-C实现高效运动检测与数据采集(4)----上报匿名上位机实现可视化
  20. sourceinsight tab 空格 对齐 等宽字体

热门文章

  1. git的基本架构欣赏
  2. pop3 postfix 命令_postfix 邮件服务的安装及详解
  3. kkk_03_Q的OI日记
  4. Wordpress免费主题装修网站(简洁高端主题)
  5. 医院无纸化电子签名解决方案
  6. ucosii 软件定时器
  7. WEB3报余额不足的问题
  8. Kotlin 以3秒后退出应用为例,用handler+postDelayed() 实现倒计时
  9. 【QQ音乐Api】移花接木 打造自己的音乐电台
  10. java 动态库_java调用dll动态库文件的一般总结