当前位置:首页 > 联系黑客 > 正文内容

c语言游戏代码大全直接复制(c语言做游戏代码)

hacker3年前 (2022-06-04)联系黑客127

本文导读目录:

求简单C语言程序代码!

小游戏2048源码:

#includestdio.h

#includestdlib.h

#includeconio.h

#includetime.h

#includewindows.h

int  jsk( );   //计算空格数

void rsgm( );  //重置游戏

void inkey( );  //按键输入

void left( );   //向左移动

void right( );  //向右移动

void up( );  //向上移动

void down( );  //向下移动

void show( );   //输出界面

void adnum( ); //添加随机数

void yes( );   //游戏是否结束(1是0否)

void gtxy(int x, int y); //控制光标位置的函数

int a[4][4];   //存储16个格子中的数字

int score = 0;  //每局得分

int best = 0;  //更高得分

int ifnum;  //是否需要添加数字(1是0否)

int over;   //游戏结束标志(1是0否)

int i,j,k;

int main( )

{ rsgm( );  //重置游戏

 inkey( );  //按键输入

 return 0;

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

{ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

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

}  //用于控制字符颜色的函数

void rsgm( )  //重置游戏

{ score = 0; ifnum = 1; over = 0; srand((unsigned)time(0)); //启动随机数发生器

int n = rand( ) % 16;  //随机函数产生0-15的数字

for (i = 0; i 4; i++)

{for (j = 0; j 4; j++)

  { if (n == 0) { int k = rand( ) % 3; if (k == 0 || k == 1) { a[i][j] = 2; }

           else { a[i][j] = 4; } n--; }

    else { a[i][j] = 0; n--; }

adnum( );

system("cls");

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

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),cursor_info);

setColor(14, 0);  //设置字体淡红色,背景为黑色

printf("\n\n\t\t  2048小游戏"); setColor(7, 0);  //恢复白字黑底

printf("\n\t┌──────┬──────┬──────┬──────┐");

printf("\n\t│      │      │      │      │");

printf("\n\t├──────┼──────┼──────┼──────┤");

printf("\n\t│      │      │      │      │");

printf("\n\t├──────┼──────┼──────┼──────┤");

printf("\n\t│      │      │      │      │");

printf("\n\t├──────┼──────┼──────┼──────┤");

printf("\n\t│      │      │      │      │");

printf("\n\t└──────┴──────┴──────┴──────┘");

show( );

void show( )  //输出界面

{ for(i=0;i4;i++)

  for(j=0;j4;j++)

     { gtxy(7*j+9,2*i+4);   //gtxy(7*j+9, 2*i+4)是光标到指定位置输出数字

       if(a[i][j]==0){printf("      "); setColor(7, 0); printf("│");}

       else if(a[i][j]10){ if (a[i][j] == 2) {setColor(14, 0); }

                                   else if (a[i][j] == 4) {setColor(13, 0); }

                                   else if (a[i][j] == 8) {setColor(12, 0); }

                                  printf("   %d  ", a[i][j]); setColor(7, 0); printf("│");

      else if (a[i][j] 100){if (a[i][j] == 16) {setColor(12, 0); }

                                      else if (a[i][j] == 32) {setColor(10, 0); }

                                     else if (a[i][j] == 64) {setColor(2, 0); }

                                    printf("  %d  ", a[i][j]); setColor(7, 0); printf("│");

    else if (a[i][j] 1000) {if (a[i][j] == 128) {setColor(9, 0); }

                                       else if (a[i][j] == 256) {setColor(1, 0); }

                                       else if (a[i][j] == 512) {setColor(13, 0); }

                                       printf("  %d ", a[i][j]); setColor(7, 0); printf("│");

     else if (a[i][j] 10000) {if (a[i][j] == 1024) {setColor(5, 0); }

                                           else {setColor(15, 0); }

                                          printf(" %d ", a[i][j]); setColor(7, 0); printf("│");

   if (jsk( ) == 0)

        { yes( ); if (over) { gtxy(9,12); setColor(10, 0);

                                    printf("\n\n  游戏结束!是否继续? [ Y/N ]:"); }

void inkey( )   //按键输入

{ int key;

while (1)

   { key = getch( );

     if (over) { if (key == 89|| key == 121) {rsgm( ); continue; }

                     else  if (key == 78|| key == 110) { return; }

                     else  continue; }

     ifnum = 0;

     if(key==224)key=getch( );

     switch (key)

           { case 75: left( ); break;

 case 77: right( ); break;

 case 72: up( ); break;

 case 80: down( );break;

      if (score best) { best = score; }

      if (ifnum) { adnum( ); show( ); }

int jsk( )   //计算空格数

{ int n = 0;

for (i = 0; i 4; i++)

  { for (j = 0; j 4; j++) { if ( a[i][j] == 0) {n++;} }  }

    return n;

void left( )   //向左移动

{ for (i = 0; i 4; i++)

   {for (j = 1, k = 0; j 4; j++)

      { if (a[i][j] 0)

          { if ( a[i][k] == a[i][j])

               { a[i][k] *= 2;  k++;

                 score = score + 2 * a[i][j];

                 a[i][j] = 0;  ifnum = 1; }

             else if ( a[i][k] == 0) { a[i][k] = a[i][j]; a[i][j] = 0; ifnum = 1; }

             else { a[i][k + 1] = a[i][j]; if ((k + 1) != j) { a[i][j] = 0; ifnum = 1; }

             k++; }

void right( )   //向右移动

{for (i = 0; i 4; i++)

{for (j = 2, k = 3; j = 0; j--)

     {if (a[i][j] 0)

         { if (a[i][k] == a[i][j])

              {a[i][k] *= 2; k--; score = score + 2 * a[i][j]; a[i][j] = 0; ifnum = 1; }

          else if ( a[i][k] == 0) {a[i][k] = a[i][j]; a[i][j] = 0; ifnum = 1; }

          else { a[i][k - 1] = a[i][j]; if ((k - 1) != j) { a[i][j] = 0; ifnum = 1; } k--; }

void up( )   //向上移动

{for (i = 0; i 4; i++)

{for (j = 1, k = 0; j 4; j++)

    {if (a[j][i] 0)

         {if ( a[k][i] == a[j][i]) { a[k][i] *= 2; k++;score = score + 2 * a[j][i];

                                            a[j][i] = 0; ifnum = 1; }

          else if ( a[k][i] == 0) { a[k][i] = a[j][i]; a[j][i] = 0; ifnum = 1; }

          else { a[k + 1][i] = a[j][i]; if ((k + 1) != j) { a[j][i] = 0; ifnum = 1; }

          k++; }

void down( )   //向下移动

{ for (i = 0; i 4; i++)

{for (j = 2, k = 3; j = 0; j--)

     {if (a[j][i] 0)

         {if (a[k][i] == a[j][i])

               {a[k][i] *= 2; k--;score = score + 2 * a[j][i]; a[j][i] = 0; ifnum = 1; }

          else if (a[k][i] == 0) {a[k][i] = a[j][i]; a[j][i] = 0; ifnum = 1; }

          else {a[k - 1][i] = a[j][i];

          if ((k - 1) != j) {a[j][i] = 0; ifnum = 1; } k--; }

void adnum( )   //添加随机数

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

int n = rand( ) % jsk( );

for (int i = 0; i 4; i++)

{for (int j = 0; j 4; j++)

      { if (a[i][j] == 0) { if (n != 0) { n--; }

                                  else {int k = rand() % 3;

                                         if (k == 0 || k == 1) {a[i][j] = 2; return; }

                                         else {a[i][j] = 4; return; } }

void yes( )   //游戏是否结束

{ for (int i = 0; i 4; i++)

{for (int j = 0; j 3; j++)

       {if (a[i][j] == a[i][j + 1] || a[j][i] == a[j + 1][i]) {over = 0; return; }}

over = 1;

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

{ COORD coord;

coord.X = x;

coord.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

vc2010可用的c语言游戏代码!要直接复制过去就能用的。

C语言本身不支持窗体程序C语言想写带窗口的需要一些额外的库的支持你可以尝试EGE图形库如果不想使用这些可以尝试WindowsAPI也可以写窗口

c语言,求代码,直接能复制到cb强的那种,不然复制很麻烦

#includestdio.h

#includestring.h

int main()

char s[60];

while(~scanf("%[^\n]%*c",s))

if(strchr(s,'A')strchr(s,'C')strchr(s,'M'))

printf("^v^\n");

else

printf("==\n");

return 0;

c语言小游戏代码

“贪吃蛇”C代码,在dev C++试验通过(用4个方向键控制)

#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];  //蛇身某节x坐标

                   int y[100];  //蛇身某节y坐标

                  }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 Color(int a);  //设定显示颜色的函数

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个位置

{Color(2);   //设定打印颜色为绿色

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

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

for(i=1;iH;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的倍数(为偶数)

Color(12);   //设定打印颜色为淡红

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

snk.len=3;      //蛇身长初值为3节

snk.speed=350;  //刷新蛇的时间,即移动速度初值为350毫秒

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

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

Color(9);   //设定打印颜色为淡蓝

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

for(i=1;isnk.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("■");   //打印蛇身

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

return;

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

{ int key;

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

{ key=getch( );

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

     { key=getch( );

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

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

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

       if(key==77dir!=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要向右移动

Color(9);

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

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

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

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

if(snk.speed150) 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且横坐标为偶数,则食物坐标取值成功

     Color(12);  //设定字符为红色

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

return;

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

{ int  i;

Color(7);

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 Color(int a)   //设定颜色的函数

{  SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE ),a );  }  

求一段C语言的完整代码,复制粘贴答案后可以运行,要求如下:

#include time.h

#include stdlib.h

#include stdio.h

int main()

    int index = 0;

    int inputCnt = 0;

    char *cardColor[4] = {"黑桃","红桃","梅花","方片"};

    int cardNum[13];

    for(index=0; index13; index++)

        cardNum[index] = index+1;    

    printf("please input card num:");

    while( scanf("%d", inputCnt) != EOF)

        printf("\n");

        srand((int)time(0));  /*每次都 初始化随即数种子*/

        for(index = 0; indexinputCnt; index++)

            printf("%s", cardColor[rand()%4]);

            printf("%d ",cardNum[rand()%13]);

        printf("\n\n");

        printf("please input card num:");

    return 0;

-------------------以上代码有问题,忘记判断是否牌已经发过,修改后代码如下--------------------

#include time.h

#include string.h

#include stdlib.h

#include stdio.h

static int checkCard(int cardCnt, int (*pInput)[2]);

int main()

    int index = 0;

    int inputCnt = 0;

    int colorIndex = 0;

    int numIndex = 0;

    int selectedCard[52][2];

    char *cardColor[4] = {"黑桃","红桃","梅花","方块"};

    int cardNum[13];

    for(index=0; index13; index++)

        cardNum[index] = index+1;    

    memset(selectedCard[0][0], 0, sizeof(selectedCard));

    #if 0 /*调式牌面值是否有重复的*/

    for(index=0;index4;index++)

        for(inputCnt=0;inputCnt13;inputCnt++)

            printf("index=%d,inputCnt=%d, sum=%d \n",index,inputCnt,(index+1)*13+inputCnt+1);

    #endif

    printf("please input card num:");

    while( scanf("%d", inputCnt) != EOF)

        if(inputCnt  53)

            printf("\n");

            index = 0; /*已经找到符合要求的张数*/    

            srand((int)time(0));

            while(index  inputCnt)

                colorIndex = rand()%4;

                numIndex = rand()%13;

                selectedCard[index][1] =  (colorIndex+1)*13 + numIndex + 1;  /*记录下已经发出的牌,防止重复*/

                //printf("--得到花色索引:%d,牌号索引:%d, 牌面值为:%d\n",colorIndex,numIndex,selectedCard[index][1]);

                if(0 == checkCard(index, selectedCard))

                   printf("%s", cardColor[colorIndex]);

                   printf("%d ",cardNum[numIndex]);

                   index++;

                else /*但发重复牌时需要清除刚才记录的牌面值*/

                    selectedCard[index][1] = 0;

            printf("\n\n");

            printf("please input card num:");

        else

            printf("输入的牌数超过52张,请重新输入!\n");

            printf("please input card num:");

    return 0;

/*检查当前生成的牌是否已经发过,0:没法过,1:发送过*/

static int checkCard(int cardCnt, int (*pInput)[2])

    int index = 0;

    int cnt = 0;

    int ret = 0;

    int errorFlag = 0;

    #if 0 /*调试信息可以删除*/

    printf("--cnt = %d,得到已经发过牌的号为:\r\n",cardCnt);

    for(index=0; index= cardCnt; index++)

        printf("%d ", pInput[index][1]);

    printf("\n");

    printf("--比较过程如下:");

    #endif

    while(cnt  cardCnt)

        for(index=cnt+1; index = cardCnt; index++)

            //printf("%d %d\n",pInput[cnt][1], pInput[index][1]);

            if(pInput[cnt][1] == pInput[index][1])

                 errorFlag = 1;

                 //printf("--ERROR--得到重复的牌--\n");

                 break;

        cnt = cnt + 1;

        if(errorFlag == 1)

            ret = 1;

            break;

    return ret;

C语言 游戏 代码

扫雷 #include graphics.h

#include stdlib.h

#include dos.h

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

int RightPress(void)/*鼠标右键按下*/

_AX=0x03;

geninterrupt(0x33);

return(_BX2);

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(MouseX280MouseX300MouseY65MouseY85)

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+j*20,95+i*20,198+j*20+5,95+i*20+5);

setcolor(BLACK);

line(198+j*20,95+i*20,198+j*20,95+i*20+10);

void DrawEmpty(int i,int j,int mode,int color)/*两种空格子的显示*/

setcolor(color);

setfillstyle(SOLID_FILL,color);

if(mode==0)/*没有单击过的大格子*/

bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);

else

if(mode==1)/*单击过后显示空白的小格子*/

bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+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;i10;i++)/*画格子*/

for(j=0;j10;j++)

DrawEmpty(i,j,0,8);

setcolor(7);

DrawSmile();/*画脸*/

randomize();

for(i=0;i10;i++)/*100个格子随机赋值有没有地雷*/

for(j=0;j10;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;i10;i++)

for(j=0;j10;j++)

if(Mine[i][j].num==1)/*显示所有的地雷*/

DrawEmpty(i,j,0,RED);

setfillstyle(SOLID_FILL,BLACK);

fillellipse(200+j*20,100+i*20,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==0j==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==0j==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==9j==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==9j==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==0Mine[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+j*20,95+i*20,randmineNUM);

Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/

return ;

/*8个方向递归显示所有的空白格子*/

if(i!=0Mine[i-1][j].num!=1)

ShowWhite(i-1,j);

if(i!=0j!=9Mine[i-1][j+1].num!=1)

ShowWhite(i-1,j+1);

if(j!=9Mine[i][j+1].num!=1)

ShowWhite(i,j+1);

if(j!=9i!=9Mine[i+1][j+1].num!=1)

ShowWhite(i+1,j+1);

if(i!=9Mine[i+1][j].num!=1)

ShowWhite(i+1,j);

if(i!=9j!=0Mine[i+1][j-1].num!=1)

ShowWhite(i+1,j-1);

if(j!=0Mine[i][j-1].num!=1)

ShowWhite(i,j-1);

if(i!=0j!=0Mine[i-1][j-1].num!=1)

ShowWhite(i-1,j-1);

void GamePlay(void)/*游戏过程*/

int i,j,Num;/*Num用来接收统计函数返回一个格子周围有多少地雷*/

for(i=0;i10;i++)

for(j=0;j10;j++)

Mine[i][j].roundnum=MineStatistics(i,j);/*统计每个格子周围有多少地雷*/

while(!kbhit())

if(LeftPress())/*鼠标左键盘按下*/

MouseGetXY();

if(MouseX280MouseX300MouseY65MouseY85)/*重新来*/

MouseOff();

gameAGAIN=1;

break;

if(MouseX190MouseX390MouseY90MouseY290)/*当前鼠标位置在格子范围内*/

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+j*20,95+i*20,randmineNUM);

mineNUM--;

MouseOn();

Mine[i][j].num=0;/*点过的格子周围雷数的数字变为0表示这个格子已经用过*/

if(mineNUM1)/*胜利了*/

GameWin();

break;

if(RightPress())/*鼠标右键键盘按下*/

MouseGetXY();

if(MouseX190MouseX390MouseY90MouseY290)/*当前鼠标位置在格子范围内*/

j=(MouseX-190)/20;/*x坐标*/

i=(MouseY-90)/20;/*y坐标*/

MouseOff();

if(Mine[i][j].flag==0Mine[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);

扫描二维码推送至手机访问。

版权声明:本文由黑客24小时在线接单网站发布,如需转载请注明出处。

本文链接:https://www.cn-sl.com/116235.html

分享给朋友:

“c语言游戏代码大全直接复制(c语言做游戏代码)” 的相关文章

胜天半子是什么意思(逆天改命)

  本题目 :【赛事推举 】欧洲杯:西班牙VS瑞典   波兰 VS 斯洛伐克 博野:足彩神去之笔   根本 里剖析 :   客队:波兰是欧洲外下游气力 球队,今朝 活着 界排名第 二 一位,比来 各项赛事与患上 四胜 三仄 三负,个中 主场与患上 四胜 二仄 一负,上一轮竞赛 波兰正在友情 赛...

怎样上淘宝网购物(新手如何在淘宝网上购物)

   二0 一 九年 一0月 二 一日淘宝地猫单 一 一运动 开端 预卖,买物津揭也能够发与了。许多 答本年 淘宝地猫单十一运动 的买物津揭要怎么用?上面小编给年夜 野先容 高 二0 一 九淘宝地猫单十一买物津揭运用规矩 先容 。   买物津揭发与天址>>>> 二0 一 九...

关于五次围剿的电影(国民党五次大围剿电影)

本年 的国庆节跟外春节是统一 地。  三地后,谦街飘荡 的红旗战谦街飘喷鼻 的月饼,国泰平易近 安战阖野欢快 ,国取野碰了个谦怀。 正在那个小少假面,年夜 娱给您们预备 了 一0部白色片子 ,咱也患上合营 爱国气氛 没有是~ 嘿嘿,周终痛快 ~ 《八佰》 豆瓣评分: 七. 七 配景 :改...

孙小头银元价格,小头银元最新价格

的二、高五角星的孙小头价钱 极其罕见 ,建国 留念币人像要小,依据 锻造 空儿战锻造 厂分歧 ,孙小头,只不外 ,但也至多 一0000元阁下 。 舟洋通俗 品相的价位正在 六 五0元阁下 , 四 五0- 五00元之间。图片上的是六星的。 一 九 二 七年‘袁年夜 头’的统货价借正在每一枚 八00元阁...

华流年京东618怎么买便宜

京东 六 一 八运动 曾经正在水冷入止外的哦,列位 有购甚么器械 了吗?许多 小同伴 正在运动 一开端 的时刻 便迫在眉睫 的购了许多 器械 了,借有些小同伴 借很夷由 没有 晓得购啥,交高去百思特小编便去学学年夜 野 二0 二0年京东 六 一 八怎么廉价 吧~...

预防感冒吃什么药(预防感冒吃什么药力度伸)

姚鑫疏风解毒胶囊安徽积仁药业有限私司$ 二 七去自立 乱:祛风浑冷,解毒利吐。用于慢性上吸呼叙熏染 风冷证,表示 为发烧 、恶风、吐疼、头疼、鼻塞、鼻涕污浊 、咳嗽。扩展 阿莫西林颗粒珠海联邦造药有限私司外山分私司$ 七. 九去自顺应 症:用于高列敏感细菌(没有发生 -内酰胺酶的菌株)惹起的熏染 :...

评论列表

闹旅城鱼
3年前 (2022-06-04)

le = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);}  //用于控制字符颜色的函数void rsg

柔侣私野
3年前 (2022-06-04)

;int MouseX;int MouseY;void Init(void);/*图形驱动*/void MouseOn(void);/*鼠标光标显示*/void Mouse

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。