问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-23 06:18

我来回答

2个回答

热心网友 时间:2023-10-25 07:21

“贪吃蛇”C代码:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#include <Windows.h>

#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<H;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.len;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 );

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

热心网友 时间:2023-10-25 07:21

#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#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;
}

这个是一个会动的笑脸,你可以从最简单开始
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 清朝一般穿什么服装? 蝉蜕怎么服用 这种笔记本电脑的风扇怎么拆出来除尘? 别人捡到手机不归还怎么办 tplink管理路由器设置 笔记本电脑风扇怎么拆 求助,车牌换了,etc如何变更 蝉蜕的功效与作用 如何更换etc车牌号码 c语言编写路线 C语言在编程的时候应注意什么问题? 清朝的服饰(图) 蝉蜕怎么熬? 换了车牌后,ETC卡是怎么处理的? 同一辆车车牌换了ETC怎么办理? 联想笔记本的风扇...这个怎么拆开啊? 电脑的电风扇可以拆除么 公司车辆转到自己名下了,车牌换了,etc还在,里面有钱,怎么转换到自己牌照下,要那些程序。 大数据哪些职位比较容易些 笔记本风扇无法拆开? 捡到手机不还犯法吗? 高速公路ETC怎么更换牌照? 笔记本电脑散热风扇可以自己拆开清理吗? 蝉蜕煮水煮多久 m3u8直播可以直接使用video标签播放吗 2020年初级社会工作者报考条件是什么? tplink的路由器 怎么设置上网行为管理 手机丢失 被他人捡到 不归还算犯法吗? 清朝官服图案是什么?代表的等级是什么? 镕宴安既久,惑于左道,有阉人希蒙者,奸宠用事,为镕所璧什么意思? C语言是什么? 要怎么编 ? 用什么编? 捡到别人手机不还犯法吗 笔记本怎么拆风扇 捡到别人手机不归还犯法吗 清朝人夏天穿什么衣服 蝉蜕冬瓜蜜枣水的做法步骤图,怎么做好吃 求个清朝皇帝吉服冠和朝冠的图(说下有什么区别,什么季节的衣服都行) 初级社工证 如何把蝉蜕煮碎 清朝官员的官服上的图案各是什么