C++实现扫雷经典小游戏

用C++复现经典扫雷,供大家参考,具体内容如下

主要是dfs实现打开一片的操作,数字带有颜色,很真实。
windows扫雷中鼠标左右键同时按也实现了,即试探。

先上图,详见下面代码:

代码中有详细注释,编译无任何错误警告。
Ps.有bug请评论指出,谢谢啦~
另外我觉得代码比较臃肿,有什么可以优化的也请提出~

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<conio.h>
#include<windows.h>
#include<cstdlib>
#include<ctime>
using namespace std;

#define MAXN 35
#define MIDX 10
#define MIDY 40
#define CG 25
#define CK 80

int G,K,Lnum,Wnum;//G为地图高,K为地图,Lnum为地图中的雷数,Wnum为剩余的小旗数
int nx,ny;//现在光标所在的位置
bool QR=0,Lose=0,is_flag_true[MAXN][MAXN];//QR为确认模式是否打开,Lose为是否输,第三个是这个位置上的旗是否放对
char map[MAXN][MAXN],tmap[MAXN][MAXN];//第一个是只有雷和空地的地图,第二个是玩家能看到的地图
int map1[MAXN][MAXN],mapc[MAXN][MAXN];//map1为数字的地图,其中0代表空地,-1为雷,1-8为周围雷的个数
//mapc为当前格子的颜色
int col[10]={240,249,242,252,241,244,243,240,248};//col[i]表示windows扫雷中i的颜色,col[0]为空格的颜色
int d[10][4]={{0},{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};//8个方向
bool ZB;//作弊是否打开

/*各种函数*/
void color(int);//颜色
void gto(int,int);//光标位置
void make();//制作随机地图
void print();//打印地图等
bool check(int,int);//判断坐标是否合法
bool is_win();//判断是否赢
bool is_lose();//是否输
void dfs(int,int);//用深搜来打开方块
void st(int,int);//试探,即windows扫雷中的左右键同时按
void flag(int,int);//小旗
void bj(int,int);//标记
void swt();//确认模式
void again();//重新开始
void zb();//作弊模式
void mainmain();//主函数
void print_real_map();//打印最终的地图
void begin();//各种操作

int main()
{
 mainmain();
}

void color(int a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
void gto(int x,int y)
{
 COORD pos;pos.X=y;pos.Y=x;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

void make()
{
 for(int i=1;i<=G;i++)
 for(int j=1;j<=K;j++)
  map[i][j]='#';//初始化
 for(int i=1;i<=Lnum;i++)
 {
 int x=rand()%G+1,y=rand()%K+1;
 while(map[x][y]=='O')
  x=rand()%G+1,y=rand()%K+1;
 map[x][y]='O';
 }//随机放雷
 for(int i=1;i<=G;i++)
 for(int j=1;j<=K;j++)
 {
  if(map[i][j]=='O')map1[i][j]=-1,mapc[i][j]=240;//如果是雷
  else
  {
  for(int k=1;k<=8;k++)
   if(map[i+d[k][0]][j+d[k][1]]=='O')
   map1[i][j]++;//计算周围雷的个数
  mapc[i][j]=col[map1[i][j]];//根据格子上的数设置颜色
  }
 }
 for(int i=1;i<=G;i++)
 for(int j=1;j<=K;j++)
  if(mapc[i][j]==0)//空地
  mapc[i][j]=240;
}
void print()
{
 system("cls");
 gto(0,MIDY-4); color(233); printf("扫雷");
 color(240);
 gto(1,MIDY);
 for(int i=2;i<=G+1;i++)
 {
 gto(i,0);
 for(int j=1;j<=K;j++)
  printf("#"),tmap[i-1][j]='#';//初始化玩家所看到的地图
 }

 gto(2,0);
 nx=2,ny=0;
 color(15);
 printf("@");

 color(15);
 gto(2,2*K+5);printf("-----规则-----");
 gto(3,2*K+5);printf("wasd:选择位置");
 gto(4,2*K+5);printf("空格:打开");
 gto(5,2*K+5);printf("1键:试探周围8个方块,如果其中有雷则不会打开,无");
 gto(6,2*K+5);printf(" 雷或旗帜标对了则会将周围无雷的位置打开,");
 gto(7,2*K+5);printf(" 如果试探时周围有标错的旗帜,则会游戏失败");
 gto(8,2*K+5);printf(" 必须额外确认一次,以便查看周围被试探的区域");
 gto(9,2*K+5);printf("2键:放置/取消小旗(F)");
 gto(10,2*K+5);printf("3键:放置/取消标记(?)");
 gto(11,2*K+5);printf("4键:打开/关闭确认模式,即每次操作需再按一次确认");
 gto(12,2*K+5);printf("5键:打开/关闭作弊模式,即显示原本地图");
 gto(13,2*K+5);printf("0键:重新开始");//打印规则

 gto(G+4,0);printf("-----操作提示-----\n");
 printf("请选择方块进行操作");

 gto(1,2*K+10);color(12);printf("剩余小旗数:%d",Wnum=Lnum);
}

bool check(int x,int y){return y>=0&&y<K&&x>=2&&x<G+2;}
//因为地图是从2行0列开始打的,而地图是从1行1列开始存的,所以gto(x,y)走到的是map[x-1][y+1]
bool is_win()
{
 int cnt=0;
 for(int i=1;i<=G;i++)
 for(int j=1;j<=K;j++)
  if(map[i][j]=='#'&&map1[i][j]==-1)
  cnt++;
 if(cnt==Lnum) return 1;
 //所有没被打开的方块都是雷=>胜利
 for(int i=1;i<=G;i++)
 for(int j=1;j<=K;j++)
  if((tmap[i][j]!='F'&&map1[i][j]==-1)||(tmap[i][j]=='F'&&map1[i][j]!=-1))
  return 0;
 return 1;
 //所有雷都标有旗
}
bool is_lose(){return Lose;}

void dfs(int x,int y)
{
 if(map1[x-1][y+1]>0)//只要边界全部是数字就return
 {
 gto(x,y),color(mapc[x-1][y+1]),printf("%d",map1[x-1][y+1]);
 tmap[x-1][y+1]=map1[x-1][y+1]+'0';
 return;
 }
 gto(x,y);color(255);
 tmap[x-1][y+1]=' ';
 printf(" ");//因为下面判断了雷,上面判断了数字,这里就一定是空地
 for(int i=1;i<=8;i++)
 {
 int xx=x+d[i][0]-1,yy=y+d[i][1]+1;//这里的xx和yy是在map中的,而不是gto中的
 if(check(xx+1,yy-1)&&tmap[xx][yy]=='#'&&map1[xx][yy]!=-1)//所以check和dfs的参数要变化
  dfs(xx+1,yy-1);
 }
}
void st(int x,int y)
{
 for(int i=1;i<=8;i++)
 {
 int xx=x+d[i][0],yy=y+d[i][1];
 if(check(xx,yy))
 {
  gto(xx,yy);
  if(tmap[xx-1][yy+1]!='#')
  color(mapc[xx-1][yy+1]-128);//减去128使周围的8个格子的背景颜色变为灰色
  else
  color(112);//这里特判一下'#',应该可以不用
  printf("%c",tmap[xx-1][yy+1]);
 }
 }
 gto(G+5,0),color(15),printf("请确认     ");
 //试探必须额外确认一次,规则上有说
 char c=getch();
 if(c=='1')
 {
 for(int i=1;i<=8;i++)
 {
  int xx=x+d[i][0],yy=y+d[i][1];
  if(check(xx,yy))
  if(tmap[xx-1][yy+1]=='F'&&map1[xx-1][yy+1]!=-1)//试探时有格子的小旗标错了=>失败
  {
   Lose=1;
   return;
  }
 }
 for(int i=1;i<=8;i++)
 {
  int xx=x+d[i][0],yy=y+d[i][1];
  if(check(xx,yy))
  if(map1[xx-1][yy+1]==-1&&tmap[xx-1][yy+1]!='F')//试探是有格子为雷=>取消打开
   return;
 }
 for(int i=1;i<=8;i++)
 {
  int xx=x+d[i][0],yy=y+d[i][1];
  if(check(xx,yy)&&tmap[xx-1][yy+1]=='#')//打开周围8个格子
  dfs(xx,yy);
 }
 }
}
void flag(int x,int y)
{
 x-=1,y+=1;
 if(tmap[x][y]=='F')//原本为小旗=>取消小旗
 {
 tmap[x][y]='#';mapc[x][y]=240;
 gto(x+1,y-1),color(240),printf("#");
 Wnum++;//更新小旗数
 }
 else//否则就放置小旗
 {
 is_flag_true[x][y]=map1[x][y]==-1;//判断小旗是否放对
 tmap[x][y]='F';mapc[x][y]=253;
 gto(x+1,y-1),color(253),printf("F");
 Wnum--;//更新小旗数
 }
 gto(1,2*K+10);color(12);printf("剩余小旗数: ");
 gto(1,2*K+22);printf("%d",Wnum);//更新小旗数
}
void bj(int x,int y)//和放小旗差不多,只是不用更新is_flag_true
{
 x-=1,y+=1;
 if(tmap[x][y]=='?')
 {
 gto(x+1,y-1),color(240),printf("#");
 tmap[x][y]='#';mapc[x][y]=240;
 }
 else
 {
 if(tmap[x][y]=='F')//如果原本这个位置上是小旗,而你把它变为了标记,就要更新小旗数
 {
  Wnum++;
  gto(1,2*K+10);color(12);printf("剩余小旗数: ");
  gto(1,2*K+22);printf("%d",Wnum);
 }
 gto(x+1,y-1),color(240),printf("?");
 tmap[x][y]='?';mapc[x][y]=240;
 }
}
void swt(){QR=!QR;}
void zb()
{
 if(ZB)//如果本来作弊打开了就把作弊地图清除
 {
 for(int i=1;i<=G;i++)
 {
  gto(i+1,K+2);
  for(int j=1;j<=K;j++)
  color(15),printf(" ");
 }
 ZB=0;
 }
 else//否则打印作弊地图
 {
 for(int i=1;i<=G;i++)
 {
  gto(i+1,K+2);
  for(int j=1;j<=K;j++)
  {
  color(mapc[i][j]);
  if(map1[i][j]==-1) printf("O");
  else if(map1[i][j]>0) printf("%d",map1[i][j]);
  else printf(" ");
  }
 }
 ZB=1;
 }
}
void again()
{
 G=K=Lnum=nx=ny=Lose=ZB=0;
 QR=0;
 memset(is_flag_true,0,sizeof(is_flag_true));
 memset(map,0,sizeof(map));
 memset(tmap,0,sizeof(tmap));
 memset(map1,0,sizeof(map1));
 memset(mapc,0,sizeof(mapc));
 color(15);
 system("cls");//初始化
 mainmain();
}

void begin()//各种操作
{
 char c=getch();
 gto(G+5,0),color(15),printf("请选择方块进行操作");
 color(240);
 if(c=='w'&&check(nx-1,ny))
 {
 gto(nx,ny);
 if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')
  color(mapc[nx-1][ny+1]);
 printf("%c",tmap[nx-1][ny+1]);
 gto(nx-=1,ny);color(15);printf("@");
 }
 else if(c=='s'&&check(nx+1,ny))
 {
 gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
 gto(nx+=1,ny);color(15);printf("@");
 }
 else if(c=='a'&&check(nx,ny-1))
 {
 gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
 gto(nx,ny-=1);color(15);printf("@");
 }
 else if(c=='d'&&check(nx,ny+1))
 {
 gto(nx,ny);if(tmap[nx-1][ny+1]!='#'||tmap[nx-1][ny+1]==' ')color(mapc[nx-1][ny+1]);printf("%c",tmap[nx-1][ny+1]);
 gto(nx,ny+=1);color(15);printf("@");
 }
 //上下左右移动
 else
 {
 if(c==' '&&(!(tmap[nx-1][ny+1]<='9'&&tmap[nx-1][ny+1]>='0'))&&tmap[nx-1][ny+1]!='F')
 {
  mapc[nx-1][ny+1]=col[map1[nx-1][ny+1]];//如果本来放了标记,mapc[nx-1][ny+1]的颜色为黑色,在打开时里面的颜色却不一定是黑色
  if(QR)
  {
  gto(G+5,0),color(15),printf("请确认     ");
  if(getch()==' ')
  {
   if(map1[nx-1][ny+1]==-1) {Lose=1;return;}
   dfs(nx,ny);
  }
  }
  else
  {
  if(map1[nx-1][ny+1]==-1) {Lose=1;return;}
  dfs(nx,ny);
  }
 }
 else if(c=='1')
 {
  if(QR)
  {
  gto(G+5,0),color(15),printf("请确认     ");
  if(getch()=='1') st(nx,ny);
  }
  else st(nx,ny);
  for(int i=1;i<=8;i++)
  {
  int xx=nx+d[i][0],yy=ny+d[i][1];
  if(check(xx,yy))
  {
   gto(xx,yy);
   if(tmap[xx-1][yy+1]!='#') color(mapc[xx-1][yy+1]);
   else color(240);
   printf("%c",tmap[xx-1][yy+1]);
  }
  }
 }
 else if(c=='2'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1'))
 {
  if(QR)
  {
  gto(G+5,0),color(15),printf("请确认     ");
  if(getch()=='2') flag(nx,ny);
  }
  else flag(nx,ny);
 }
 else if(c=='3'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1'))
 {
  if(QR)
  {
  gto(G+5,0),color(15),printf("请确认     ");
  if(getch()=='3') bj(nx,ny);
  }
  else bj(nx,ny);
 }
 else if(c=='4')
 {
  if(QR)
  {
  gto(G+5,0),color(15),printf("请确认     ");
  if(getch()=='4') swt();
  }
  else swt();
 }
 else if(c=='5')
 {
  if(QR)
  {
  gto(G+5,0),color(15),printf("请确认     ");
  if(getch()=='5') zb();
  }
  else zb();
 }
 else if(c=='0')
 {
  if(QR)
  {
  gto(G+5,0),color(15),printf("请确认     ");
  if(getch()=='0') again();
  }
  else again();
 }
 }
}

void mainmain()
{
 system("mode con cols=120 lines=35");//设置窗口大小
 srand((unsigned)time(NULL));
 int mode;
 printf("1.初级\n2.中级\n3.高级\n4.自定义\n");
 scanf("%d",&mode);if(mode>4) mode=4;
 if(mode==1) G=9,K=9,Lnum=10;
 else if(mode==2) G=16,K=16,Lnum=40;
 else if(mode==3) G=16,K=30,Lnum=99;//三种等级的参数
 else
 {
 printf("请输入雷区高度:");scanf("%d",&G);
 printf("请输入雷区宽度:");scanf("%d",&K);
 printf("请输入雷个数(建议不超过总大小的三分之一):");scanf("%d",&Lnum);
 if(G>24) G=24;if(K>30) K=30;
 if(G<9) G=9;if(K<9) K=9;
 if(Lnum<10) Lnum=10;if(Lnum>G*K*9/10) Lnum=G*K*9/10;
 //控制参数的范围,最后一个if是雷的数量不超过地图大小的9/10
 }
 make();
 print();
 while(1)
 {
 begin();
 bool f1=is_win(),f2=is_lose();
 if(f1||f2)
 {
  gto(0,0);
  if(f1)
  color(202),gto(0,0),printf("你 赢 了!!是否重来?(y/n)");
  if(f2)
  color(137),gto(0,0),printf("你 输 了!!是否重来?(y/n)");//输赢
  print_real_map();
  char c=getch();
  if(c=='y'||c=='Y') again();
  else
  {
  color(15);
  system("cls");
  gto(MIDX,MIDY-5);
  printf("欢迎下次再来");
  return;
  }
 }
 }
}
void print_real_map()
{
 color(240);
 for(int i=1;i<=G;i++)
 {
 gto(i+1,0);
 for(int j=1;j<=K;j++)
 {
  if(tmap[i][j]=='F'&&is_flag_true[i][j]==0)//如果旗标错了显示红色的X
  color(252),printf("X");
  else if(map1[i][j]==-1)//雷为黑色O
  color(240),printf("O");
  else if(map1[i][j]==0)//空
  color(240),printf(" ");
  else//数字
  color(mapc[i][j]),printf("%d",map1[i][j]);
 }
 }
}

更多精彩游戏小代码,请点击《游戏专题》阅读

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++实现一个扫雷小游戏

    本文实例为大家分享了C++实现扫雷小游戏的具体代码,供大家参考,具体内容如下 目前的版本是0.98版本,可以提出增加新功能意见哦 代码如下: #include<bits/stdc++.h> #include<windows.h> using namespace std; long long int c,dev,m,k,cnt,d,e,jie=10,z,abc,n,b[1000][1000],a[1000][1000],cc,cd,ce,def; //c是随机行,k是随机列 bool

  • C++实现简单的扫雷游戏(控制台版)

    C++新手的代码,请各位多包涵. 用C++写的一个简单的控制台版扫雷游戏.玩家通过输入方块的坐标来翻开方块. 只是一个雏形,能够让玩家执行翻开方块的操作并且判断输赢,还未添加标记方块.游戏菜单.记录游戏时间.重新开一局等等的功能. 玩家输入坐标的方式来翻开方块只适用于小型的"雷区",若"雷区"大了,用坐标会变得很不方便. 代码片段扫雷V1.1 #include<stdio.h> #include<Windows.h> #define YELL

  • C++实现简单扫雷游戏

    扫雷是一个经典的电脑小游戏,用C++来编一下,效果自己试一下 #include<stdio.h> #include<Windows.h> #define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY #define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY #define ORANGE FOREGROUND_RED |

  • 利用c++和easyx图形库做一个低配版扫雷游戏

    游戏界面 由于这个游戏是我抱着玩一玩的心态做出来的,所以没有过多的去设计界面,也没有去找游戏的资源(图片.游戏音效等).仅使用了不同颜色的方块来表示游戏中方块的状态和种类.(绿色为初始状态(未翻转的状态),黄色为翻转后的背景颜色,蓝色表示已插旗的方块,红色代表地雷) 图1 游戏主菜单界面 图二 模式一的游戏界面(20*20 40个雷) 图三 模式二的游戏界面(10*10 20个雷) 图四 游戏成功界面 图五 游戏失败界面 2.全部代码 #include<graphics.h> #include

  • C++实现扫雷游戏

    本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下 直接上代码 #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<queue> #include<ctype.h> #define A 17 //地图的高 #define B 17 //地图的宽 #de

  • C++实现扫雷游戏(控制台不闪屏版)

    之前写了一个C++ 的控制台扫雷小游戏,但由于过度使用system("cls")刷屏,导致闪屏,因此重写了一个改善的不闪屏版本,并把逻辑重新捋了一遍. map.h #ifndef MAP_H_ #define MAP_H_ #define MAX_WID 18 #define MAX_LEN 32 #define UP_EDGE 1 //上边界 #define LEFT_EDGE 1 //左边界 #define RIGHT_EDGE _len //右边界 #define DOWN_ED

  • C++实现扫雷小游戏

    本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<queue> #include<ctype.h> #define A 17 //地图的高 #define B 17 //地图的宽 #define C

  • C++实现扫雷游戏(控制台版)

    本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下 需要开一个map.txt  写入地图 地图中 *表示空地   ; x表示地雷 ********** ********** **x******* ********** ********** ********** ********** ********** ********** 然后就是扫雷的控制台代码了,只简单的检测了一下 #include <stdio.h> #include <string.h> #def

  • C++基于EasyX实现简单扫雷游戏

    本文实例为大家分享了C++ EasyX实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 [实现代码] #include <cmath> #include <time.h> #include <easyx.h> #include <conio.h> using namespace std; #define Size 500 //定义窗口大小 #define SquareSize 50 //定义格子大小 #define BackGroundColor LIG

  • C++实现扫雷经典小游戏

    用C++复现经典扫雷,供大家参考,具体内容如下 主要是dfs实现打开一片的操作,数字带有颜色,很真实. windows扫雷中鼠标左右键同时按也实现了,即试探. 先上图,详见下面代码: 代码中有详细注释,编译无任何错误警告. Ps.有bug请评论指出,谢谢啦~ 另外我觉得代码比较臃肿,有什么可以优化的也请提出~ #include<cstdio> #include<cstring> #include<algorithm> #include<conio.h> #i

  • Python实现四个经典小游戏合集

    目录  一.效果展示 1.俄罗斯方块 2.扫雷 3.五子棋 4.贪吃蛇 二.代码展示 1.俄罗斯方块 2.扫雷 3.五子棋 4.贪吃蛇  一.效果展示 1.俄罗斯方块 这个应该是玩起来最最简单的了- 2.扫雷 运气好,点了四下都没踩雷哈哈- 3.五子棋 我是菜鸡,玩不赢电脑人- 4.贪吃蛇 害,这个是最惊心动魄的,为了我的小心脏,不玩了不玩了- 女朋友:你就是借机在玩游戏,逮到了 啊这- 那我不吹牛逼了,我们来敲代码吧~ 二.代码展示 1.俄罗斯方块 方块部分 这部分代码单独保存py文件,这里我

  • 用Python设计一个经典小游戏

    本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. 玩家选择下注,押大或押小: 输入下注金额: 摇3个骰子,11≤骰子总数≤18为大,3≤骰子总数≤10为小: 如果赢了,获得1倍金额,输了,扣除1倍金额,本金为0时,游戏结束. 程序运行结果是这样的: 现在,我们来梳理下思路. 我们

  • Java编程经典小游戏设计-打砖块小游戏源码

    [程序中使用的数据结构和符号说明] HitBrick类 GreenBallThread控制小球路线 xUp,yUp,bouncing定义变量存储16位数值形式 x,y小球坐标 xDx,yDy坐标增量 MAX_X,MAX_Y坐标最大值 renew初始化 label标签 Rx,Ry横板坐标 Brick[]砖块 ball小球 HitBrick()定义小球横板及砖块位置坐标 keyPressd(keyEent)定义小球启动键(按空格键启动) keyReleased(keyEvent)接收键盘事件侦听器接

  • 基于javascript实现贪吃蛇经典小游戏

    本文实例为大家分享了JS实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta htt

  • Unity3D实现经典小游戏Pacman

    目录 项目概况 整体布局 地图介绍 玩法介绍 相关知识 版本说明 项目源码 项目概况 整体布局 地图介绍 除了音效,游戏地图上的元素有: 普通糖豆(玩家通过移动,经过的普通糖豆会被吃掉,获得积分)  特殊糖豆(玩家吃到后,可以让所有敌方停止移动,产生幻影效果) 隔离墙(相当于迷宫的墙,在两堵墙之间的间隙才能移动)  剩余游戏时间Remain(共设300s,时间一到,游戏结束) 截止到现在花费的游戏时间Now(设在0~300之间) 截止到目前为止的游戏得分Score(越高越好) 敌方人机(分为四种

  • 十个Python经典小游戏的代码合集

    目录 1.小猫运动 游戏源码 游戏效果 2.弹球 游戏源码 游戏效果 3.画正方形 游戏源码 游戏效果 4.彩点实验 游戏源码 游戏效果 5.彩点实验圆形 游戏源码 游戏效果 6.彩点实验下三角 游戏源码 游戏效果 7.彩点实验抛物线 游戏源码 游戏效果 8.彩点实验椭圆形 游戏源码 游戏效果 9.旋转文字 游戏源码 游戏效果 10.迷宫游戏 游戏源码 游戏效果 1.小猫运动 游戏源码 # @Author : 辣条 ''' 多行注释 本程序运行后会有一只小猫向前走 安装模块 pip instal

  • C语言扫雷排雷小游戏实现全程

    目录 test.c game.h game.c 详解游戏代码的实现 1初化扫雷区 2打印扫雷区 3 设置雷 4 排雷 4.1展开一片的功能 4.2雷标记功能的实现 游戏过程 test.c 在这个文件中,我们主要是完成游戏逻辑的测试,在这里我们要注意的点,我们建立了二个数组,mine数组我们用来存放布置雷的信息,show数组存放排查出雷的信息.本次排雷区域是9*9的格子,为了防止数组出现越界,我们特意把数组的下标定义大点变为11*11. #define _CRT_SECURE_NO_WARNING

  • C语言贪吃蛇经典小游戏

    一.贪吃蛇小游戏简介: 用上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,也不能咬到自己的身体,等到了一定的分数,就能过关. 二.函数框架 三.数据结构 typedef struct Snake { size_t x; //行 size_t y; //列 struct Snake* next; }Snake, *pSnake; 定义蛇的结构体,利用单链表来表示蛇,每个结点为蛇身体的一部分. 四.代码实现(vs2010  c

  • C语言实现经典扫雷小游戏完整代码(递归展开 + 选择标记)

    目录 游戏介绍 游戏整体框架 游戏具体功能及实现 1.雷盘的定义 2.雷盘的初始化 3.布置雷 4.排查雷 5.递归式展开一片 6.获取周围雷的个数 7.标记特定位置 8.打印雷盘 游戏完整代码 1.test.c 2.game.h 3.game.c 游戏效果展示 大家好,今天我们将一起用C语言实现一个经典小游戏 – 扫雷,Let is go ! 游戏介绍 扫雷游戏相信大家都玩过,上图就是一个网页版的扫雷,它的规则是玩家选择一个方格,若此方格没有地雷,那么该方格会显示与它相邻的八个方格中雷的个数,

随机推荐