c语言游戏代码

新建vc程序文件方法/步骤:

1,打开VC—新建------工程名称-----Win32 Console Application—确定-------一个空工程----完成-------确定。

2,打开VC—新建----文件名-----c++source file----确定。

3,输入代码----组建----点击编译-----点击组建-----点击执行。

完全正确例题<C++贪吃蛇小游戏>

#include<iostream.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#define N 21
void gotoxy(int x,int y)//位置函数
{
COORD pos;
pos.X=2x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void color(int a)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果)
{
int i,j;//初始化围墙
int wall[N+2][N+2]={{0}};
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
wall[i][j]=1;
}
color(11);
for(i=0;i<N+2;i++)
{
for(j=0;j<N+2;j++)
{
if(wall[i][j])
cout<<“■”;
else cout<<“□” ;
}
cout<<endl;
}
gotoxy(N+3,1);//显示信息
color(20);
cout<<“按 W S A D 移动方向”<<endl;
gotoxy(N+3,2);
color(20);
cout<<“按任意键暂停”<<endl;
gotoxy(N+3,3);
color(20);
cout<<“得分:”<<endl;
apple[0]=rand()%N+1;//苹果
apple[1]=rand()%N+1;
gotoxy(apple[0],apple[1]);
color(12);
cout<<“●”<<endl;
}
int main()
{
int i,j;
int** snake=NULL;
int apple[2];
int score=0;
int tail[2];
int len=3;
char ch=‘p’;
srand((unsigned)time(NULL));
init(apple);
snake=(int**)realloc(snake,sizeof(int
)len);
for(i=0;i<len;i++)
snake[i]=(int
)malloc(sizeof(int)2);
for(i=0;i<len;i++)
{
snake[i][0]=N/2;
snake[i][1]=N/2+i;
gotoxy(snake[i][0],snake[i][1]);
color(14);
cout<<“★”<<endl;
}
while(1)//进入消息循环
{
tail[0]=snake[len-1][0];
tail[1]=snake[len-1][1];
gotoxy(tail[0],tail[1]);
color(11);
cout<<“■”<<endl;
for(i=len-1;i>0;i–)
{
snake[i][0]=snake[i-1][0];
snake[i][1]=snake[i-1][1];
gotoxy(snake[i][0],snake[i][1]);
color(14);
cout<<“★”<<endl;
}
if(kbhit())
{
gotoxy(0,N+2);
ch=getche();
}
switch(ch)
{
case ‘w’:snake[0][1]–;break;
case ‘s’:snake[0][1]++;break;
case ‘a’:snake[0][0]–;break;
case ‘d’:snake[0][0]++;break;
default: break;
}
gotoxy(snake[0][0],snake[0][1]);
color(14);
cout<<“★”<<endl;
Sleep(abs(200-0.5
score));
if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1
{
score++;
len++;
snake=(int**)realloc(snake,sizeof(int*)len);
snake[len-1]=(int
)malloc(sizeof(int)*2);
apple[0]=rand()%N+1;
apple[1]=rand()%N+1;
gotoxy(apple[0],apple[1]);
color(12);
cout<<“●”<<endl;
gotoxy(N+5,3);
color(20);
cout<<score<<endl;
}
if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败
{
gotoxy(N/2,N/2);
color(30);
cout<<“失败!!!”<<endl;
for(i=0;i<len;i++)
free(snake[i]);
Sleep(INFINITE);
exit(0);
}
}
return 0;
}

完全正确例题“推箱子”C代码:

#include <stdio.h>

#include <conio.h>

#include<stdlib.h>

#include<windows.h>

int m =0; //m代表第几关

struct maps{short a[9][11]; };

struct maps map[5]={ 0,0,0,0,0,0,0,0,0,0,0, //共5关,每关9行11列

              0,1,1,1,1,1,1,1,0,0,0,

              0,1,0,0,0,0,0,1,1,1,0,

              1,1,4,1,1,1,0,0,0,1,0,  //0空地,1墙

              1,5,0,0,4,0,0,4,0,1,0,  //4是箱子,5是人

              1,0,3,3,1,0,4,0,1,1,0,  //3是目的地

              1,1,3,3,1,0,0,0,1,0,0,  //7是箱子在目的地(4+3)

              0,1,1,1,1,1,1,1,1,0,0,  //8是人在目的地(5+3)

              0,0,0,0,0,0,0,0,0,0,0,

              0,0,0,0,0,0,0,0,0,0,0,

              0,0,1,1,1,1,0,0,0,0,0,

              0,0,1,5,0,1,1,1,0,0,0,

              0,0,1,0,4,0,0,1,0,0,0,

              0,1,1,1,0,1,0,1,1,0,0,

              0,1,3,1,0,1,0,0,1,0,0,

              0,1,3,4,0,0,1,0,1,0,0,

              0,1,3,0,0,0,4,0,1,0,0,

              0,1,1,1,1,1,1,1,1,0,0,

              0,0,0,0,0,0,0,0,0,0,0,

              0,0,0,1,1,1,1,1,1,1,0,

              0,0,1,1,0,0,1,0,5,1,0,

              0,0,1,0,0,0,1,0,0,1,0,

              0,0,1,4,0,4,0,4,0,1,0,

              0,0,1,0,4,1,1,0,0,1,0,

              1,1,1,0,4,0,1,0,1,1,0,

              1,3,3,3,3,3,0,0,1,0,0,

              1,1,1,1,1,1,1,1,1,0,0,

              0,1,1,1,1,1,1,1,1,1,0,

              0,1,0,0,1,1,0,0,0,1,0,

              0,1,0,0,0,4,0,0,0,1,0,

              0,1,4,0,1,1,1,0,4,1,0,

              0,1,0,1,3,3,3,1,0,1,0,

              1,1,0,1,3,3,3,1,0,1,1,

              1,0,4,0,0,4,0,0,4,0,1,

              1,0,0,0,0,0,1,0,5,0,1,

              1,1,1,1,1,1,1,1,1,1,1,

              0,0,0,0,0,0,0,0,0,0,0,

              0,0,0,1,1,1,1,1,1,0,0,

              0,1,1,1,0,0,0,0,1,0,0,

              1,1,3,0,4,1,1,0,1,1,0,

              1,3,3,4,0,4,0,0,5,1,0,

              1,3,3,0,4,0,4,0,1,1,0,

              1,1,1,1,1,1,0,0,1,0,0,

              0,0,0,0,0,1,1,1,1,0,0,

             0,0,0,0,0,0,0,0,0,0,0 };

void DrMap( ) //绘制地图

{ CONSOLE_CURSOR_INFO cursor_info={1,0}; //隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

printf(“\n\n \t\t\b推箱子”);

printf(“\n \t”);

for (int i = 0; i < 9; i++)

{for (int j = 0; j < 11; j++)

   {switch (map[m].a[i][j])

      {case 0:  printf("  "); break;

       case 1:  printf("■"); break;

       case 3:  printf("◎");break;

       case 4:  printf("□"); break;

       case 5:  printf("♀"); break;   //5是人

       case 7:  printf("□"); break;  //4 + 3箱子在目的地中

       case 8:  printf("♀");break;   // 5 + 3人在目的地中

      }

   }

  printf("\n\t");

}

}

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

{ COORD coord;

coord.X = x;

coord.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

void start( ) //开始游戏

{ int r, c; //人的下标

for (int i = 0; i < 9; i++)

{ for (int j = 0; j < 11; j++)

  {if (map[m].a[i][j] == 5||map[m].a[i][j]==8) { r = i;  c = j; } } //i j 人的下标

}

char key;

key = getch( );

switch (key)

{case ‘W’:

case 'w':

case 72:

  if (map[m]. a[r - 1][c] == 0|| map[m]. a [r - 1][c] == 3)

    { gtxy(2*c+8,r-1+3); printf("♀");  // gtxy(2*c+8,r-1+3)是到指定位置输出字符

     if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

     if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

      map[m]. a [r - 1][c] += 5;  map[m]. a [r][c] -= 5; }

   else  if (map[m]. a [r - 1][c] == 4 || map[m]. a [r - 1][c] == 7)

    { if (map[m]. a [r - 2][c] == 0 || map[m]. a [r - 2][c] == 3)

       { gtxy(2*c+8,r-2+3); printf("□"); gtxy(2*c+8,r-1+3); printf("♀");

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

        if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

        map[m]. a [r - 2][c] += 4;  map[m]. a [r - 1][c] += 1;

         map[m]. a [r][c] -= 5; }

    } break;

case 'S':

case 's':

case 80:

    if (map[m]. a [r + 1][c] == 0 || map[m]. a [r + 1][c] == 3)

     { gtxy(2*c+8,r+1+3); printf("♀");

       if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

      if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

      map[m]. a [r + 1][c] += 5;  map[m]. a [r][c] -= 5; }

     else if (map[m]. a [r + 1][c] == 4 || map[m]. a [r+ 1][c] == 7)

      { if (map[m]. a [r + 2][c] == 0 || map[m]. a [r + 2][c] == 3)

        { gtxy(2*c+8,r+2+3); printf("□"); gtxy(2*c+8,r+1+3); printf("♀");

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

         if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

         map[m]. a [r + 2][c] += 4; map[m]. a [r + 1][c] += 1;

         map[m]. a [r][c] -= 5; }

      }break;

case 'A':

case 'a':

case 75:

    if (map[m]. a [r ][c - 1] == 0 || map[m]. a [r ][c - 1] == 3)

     { gtxy(2*(c-1)+8,r+3); printf("♀");

      if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

       if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

      map[m]. a [r ][c - 1] += 5; map[m]. a [r][c] -= 5; }

    else if (map[m]. a [r][c - 1] == 4 || map[m]. a [r][c - 1] == 7)

     {if (map[m]. a [r ][c - 2] == 0 || map[m]. a [r ][c - 2] == 3)

        { gtxy(2*(c-2)+8,r+3); printf("□"); gtxy(2*(c-1)+8,r+3); printf("♀");

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

         if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

         map[m]. a [r ][c - 2] += 4; map[m]. a [r ][c - 1] += 1;

      map[m]. a [r][c] -= 5; }

     }break;

case 'D':

case 'd':

case 77:

    if (map[m]. a [r][c + 1] == 0 || map[m]. a [r][c + 1] == 3)

     { gtxy(2*(c+1)+8,r+3); printf("♀");

       if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

       if(map[m]. a[r ][c] == 8) {gtxy(2*c+8,r+3); printf("◎");}

      map[m]. a [r][c + 1] += 5;  map[m]. a [r][c] -= 5; }

    else if (map[m]. a [r][c + 1] == 4 || map[m]. a [r][c + 1] == 7)

     { if (map[m]. a [r][c + 2] == 0 || map[m]. a [r][c + 2] == 3)

        { gtxy(2*(c+2)+8,r+3); printf("□"); gtxy(2*(c+1)+8,r+3); printf("♀");

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

        if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

        map[m]. a [r][c + 2] += 4; map[m]. a [r][c + 1] += 1;

          map[m]. a [r][c] -= 5; }

     }break;

}

}

int ifwan( ) //是否完成(1是0否)

{ if(m==0){if(map[m].a[5][2]==7&& map[m].a[5][3]==7&&

map[m].a[6][2]==7&& map[m].a[6][3]==7) return 1;}

if(m==1){if(map[m].a[5][2]==7&& map[m].a[6][2]==7&&

map[m].a[7][2]==7) return 1;}

if(m==2){if(map[m].a[7][1]==7&& map[m].a[7][2]==7&& map[m].a[7][3]==7&&

map[m].a[7][4]==7&& map[m].a[7][5]==7) return 1;}

if(m==3){if(map[m].a[4][4]==7&& map[m].a[4][5]==7&& map[m].a[4][6]==7&&

map[m].a[5][4]==7&& map[m].a[5][5]==7&& map[m].a[5][6]==7) return 1;}

if(m==4){if(map[m].a[3][2]==7&& map[m].a[4][1]==7&& map[m].a[4][2]==7&&

map[m].a[5][1]==7&& map[m].a[5][2]==7) return 1;}

return 0;

}

int main( ) //主函数

{ while (1)

 { system("cls");

   DrMap( );

  while (1)

        { start( );

          if(ifwan()){printf("\007");break;} //完成后响铃

       }

   m+=1;

 }

return 0;

}

全正确例题:数字版“拼图”C代码:

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<time.h>

#include<windows.h>

int i, j, r, k; //i、j、r用于循环, k存放随机数值

int m, n; // m、n是当前空位的下标

int a[4][4]; //存储4×4共16个数字的数组

void show(void); //输出界面

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

int yes(void); //判断排序是否成功(1是0否)

void up(void); //数字向上移动到空位(空位则下移)

void down(void); //数字向下移

void left(void); //数字向左移

void rght(void); //数字向右移

void inkey(void); //按键操作

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

int main(void)

{ while(1)

 { csh( );

   while(1)

      {  inkey();

         show();

         if ( yes( ) )

            { gtxy(6,12); printf("你成功了! 再来一局y/n?"); break; }

     }

   if(getch( )=='n')break;

 }

return 0;

}

void csh(void) //初始化

{ r=0;

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

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

for(i=0;i<4;i++) //给数组a依序赋值

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

    { if (i==3 && j==3) a[i][j]=0;

      else  a[i][j]=1+r++;

    } 

m=3; n=3; //记下空格(值为0)的下标

down( ); rght( ); rght( ); down( ); //预演4步

srand((unsigned)time(0)); //初始化随机数发生器

for(r=0;r<500;r++) //将数组各值打乱

{ k=rand( )%(4);

  switch(k)

     { case 0: { up( ); break; }

      case 1: {down( ); break; }

     case 2: { left( ); break; }

     case 3: { rght( ); break; }

   }

}

system(“cls”);

printf(“\n\n\t\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│ │ │ │ │”);

printf(“\n\t└──────┴──────┴──────┴──────┘”);

show( );

}

void show(void) //输出界面

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

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

    { gtxy(7*j+9,2*i+4);  if(a[i][j]==0)printf("      │");

      else if(a[i][j]>9)printf("  %d  │",a[i][j]);

      else printf("   %d  │",a[i][j]);

    }

}

void inkey(void) //按键操作

{ int key;

key=getch( );

switch(key)

   { case 72: { up( ); break; }

     case 80: {down( ); break; }

     case 75: {left( ); break; }

     case 77: { rght( ); break; }

   }

}

void up(void) //向上移动

{ if (m!=3) //空位不得在下边界

  { a[m][n]=a[m+1][n];  m++; a[m][n]=0; }

}

void down(void) //向下移动

{ if (m!=0) //空位不得在上边界

 { a[m][n]=a[m-1][n];  m--; a[m][n]=0; }

}

void left(void) //向左移动

{ if (n!=3) //空位不得在右边界

 { a[m][n]=a[m][n+1]; n++; a[m][n]=0; }

}

void rght(void) //向右移动

{ if (n!=0) //空位不得在左边界

 { a[m][n]=a[m][n-1]; n--; a[m][n]=0; }

}

int yes(void) //判断是否成功

{ r=0;

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

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

   { if (a[i][j]!=1+r++) return (r==16)?1:0; }

}

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

{ COORD coord;

coord.X = x;

coord.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优胜111111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值