• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 基于C语言实现的扫雷游戏代码

基于C语言实现的扫雷游戏代码

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了扫雷c语言代码,c语言扫雷源代码,c语言扫雷游戏代码,c语言扫雷程序代码,c语言扫雷小游戏代码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文详细讲述了基于C语言实现的扫雷游戏代码,代码中备有比较详细的注释,便于读者阅读和理解。希望对学习游戏开发的朋友能有一点借鉴价值。

完整的实例代码如下:

/*
模拟扫雷游戏 
*/
#include <graphics.h>
#include <math.h>
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>

union REGS regs;
int size=15;/*用于表示每个方块的大小(正方形的边长)*/
int pix,piy=50;/*pix,piy是矩阵的偏移量*/
char b[2]="1";/*用于显示方格周围的雷的个数*/
int pan[30][16];/*用于记录盘面的情况:0:没有、9:有雷、1~8:周围雷的个数*/
int pan1[30][16];/*pan1[][]纪录当前的挖雷情况,0:没有操作、1:打开了、2:标记了*/
int tt;/*纪录时间参数*/
int Eflags;/*用于标记鼠标按钮的有效性,0:有效,1:无效,2:这是鼠标的任意键等于重新开始*/

int Msinit();
void Draw(int x,int y,int sizex,int sizey);
void Facedraw(int x,int y,int sizel,int k);
void Dead(int sizel,int x,int y);
void Setmouse(int xmax,int ymax,int x,int y);
int Msread(int *xp,int *yp,int *bup,struct time t1,int k);
void Draw1(int x,int y);
int Open(int x,int y);
float Random();
void Have(int sum,int x,int y,int xx,int yy);
void Help();
void Coread();
void Ddraw2(int x,int y);


/*下面是主函数*/
main()
{
 int mode=VGAHI,devices=VGA;/*图形模式初始化的变量*/
 char ams;         /*鼠标操作中的标志变量*/
 int xms,yms,bms;      /*鼠标的状态变量*/
 int i,j,k,k1=0;      /*i,j,k是循环变量*/
 int x=9,y=9,flags=0;    /*x,y矩阵的大小*/
 int sum=10;        /*sum 盘面的雷的总数目,是个x,y的函数*/
 int x1=0,y1=0;       /*用于记录光标当前的位置*/
 int x11=0,y11=0;      /*暂时保存鼠标位置的值*/
 int sizel=10;       /*脸的大小*/
 int cflags=1;   /*这是菜单操作标志变量,没有弹出1,弹出0*/
 struct time t1={0,0,0,0}; /*时间结构体,头文件已定义*/
 int co[3];   /*暂时纪录历史纪录*/
 void far *Map;   /*用于保存鼠标图片*/
 char name[3][20];   /*名字字符串,用于记录名字*/
 FILE * p;   /*文件指针用于文件操作*/

 Msinit();               /*鼠标初始化*/
 /*registerbgidriver(EGAVGA_driver);*/
 initgraph(&devices,&mode,"C:\\tc");   /*图形模式初始化*/

/*为图片指针分配内存*/
if((Map=farmalloc(imagesize(0,0,20,20)))==NULL)/*图片的大小是20*20*/
 {
 printf("Memory ererr!\n");
 printf("Press any key to out!\n");
 exit(1);
 }

 /*用于检验文件是否完整*/
 while((p = fopen("score.dat", "r")) == NULL) /*如果不能打开就新建一个*/
  {
 if((p = fopen("score.dat", "w")) == NULL)/*如果不能新建就提示错误并推出*/
 {
  printf("The file cannot open!\n");
  printf("Presss any key to exit!\n");
  getch();
    exit(1);
 }
 /*写入初始内容*/
 fprintf(p,"%d %d %d,%s\n%s\n%s\n",999,999,999,"xiajia","xiajia","xiajia");
 fclose(p); 
 }
 /*暂时读出历史纪录。并用co[3]纪录*/
 fscanf(p,"%d %d %d,",&co[0],&co[1],&co[2]);
 for(i=0;i<3;i++)
 fscanf(p,"%s\n",name[i]);
 fclose(p);

 Setmouse(1,1,615,460); /*设置鼠标的活动范围*/
 pix=250-x*size/2; /*计算地雷按钮矩阵的左边*/

bss:  b[0]='1';    /*游戏开始和重来的切入点*/
    flags=0; /*测试中这个变量好像没有作用,但是为了逻辑的完整性暂时保留*/
    k=0;
 Eflags=0;
 tt=0;
 cleardevice();/*清屏*/
 setbkcolor(LIGHTCYAN);
    for(i=0;i<30;i++)    /*盘面初始化*/
    for(j=0;j<16;j++)
    {
 pan[i][j]=0;
     pan1[i][j]=0;
 }

 for(;;) /*用于生成雷的盘面情况*/
  {
 i=(int)(x*Random());
   j=(int)(y*Random());
   if(pan[i][j]==0)
     {
  pan[i][j]=9;
  k=k+1;
     }
   if(k==sum) break;
  } 

for(i=0;i<x;i++)/*用于统计各点的周边情况*/
for(j=0;j<y;j++)
 {
 if(pan[i][j]==0)/*只有没有雷的才需要处理*/
  {
   if(i-1>=0 && j-1>=0 && pan[i-1][j-1]==9) pan[i][j]++;
  if(j-1>=0 && pan[i][j-1]==9)   pan[i][j]++;
  if(i+1<x && j-1>=0 && pan[i+1][j-1]==9) pan[i][j]++;
  if(i-1>=0 && pan[i-1][j]==9)   pan[i][j]++;
  if(i+1<x && pan[i+1][j]==9)   pan[i][j]++;
  if(i-1>=0 && j+1<y && pan[i-1][j+1]==9) pan[i][j]++;
  if(j+1<y && pan[i][j+1]==9)   pan[i][j]++;
  if(i+1<x && j+1<y && pan[i+1][j+1]==9)  pan[i][j]++;
 }
 }

 if(sum==10)/*画底座*/
 {
 Draw(170,1,162,200);
 setcolor(1);
 outtextxy(175,5,"Game( )");
 setcolor(4);
 outtextxy(175,5,"   G");
 }/*小*/
 else
 if(sum==40)
 {
  Draw(115,1,272,307);
  setcolor(1);
  outtextxy(120,5,"Game(G)");
  setcolor(4);
  outtextxy(120,5,"   G");
 }/*中*/
   else
   if(sum==99)
  {
   Draw(40,1,470,307);
   setcolor(1);
   outtextxy(45,5,"Game(G)");
   setcolor(4);
   outtextxy(45,5,"   G");
  }/*大*/

 setcolor(1);/*显示提示信息*/
 outtextxy(100,350," : Help.");
 setcolor(4);
 outtextxy(100,350,"H");
 setcolor(1);
 outtextxy(200,350," /  : exit.");
 setcolor(4);
 outtextxy(200,350,"Q");
 outtextxy(220,350,"ESC");
 setcolor(1);
 outtextxy(330,350," : cores.");
 setcolor(4);
 outtextxy(330,350,"R");

 Facedraw(250,30,sizel,2);/*显示控制按钮,脸型*/

 for(i=0;i<x;i++)/*这一段用于描绘盘面*/
 for(j=0;j<y;j++)
 {
 Draw(i*size+pix,j*size+piy,size,size);
 }

 Have(sum,pix+20,30,x,y);/*各项的初始显示*/
 k=0;
 setfillstyle(1, 0);
 bar(460-pix,25,490-pix,40);
 setcolor(4);
 outtextxy(465-pix,30,"000");

/*下面这一段用于接收用户的控制,并做出反应*/
 for(;;)
 {
 ams=Msread(&xms,&yms,&bms,t1,k);/*读取鼠标状态*/

  /*下面一段用于保存并记录鼠标图片*/
 if(flags!=0)
 {
  putimage(x11,y11,Map,COPY_PUT);
 }
 x11=xms;
 y11=yms;
 flags=1;

 /*这里插入菜单操作*/
 if((xms>=pix-10 && xms<=pix+26 && yms>=2 && yms<=14 && bms==1) || ams=='g' || ams=='G')/*点中菜单的判断*/
 {
  Draw(pix-10,14,100,88); /*画菜单*/
  cflags=0;
  setcolor(1);/*下面显示菜单项*/
  outtextxy(pix-4,19,"Restar(R)");
  setcolor(4);
  outtextxy(pix-4,19,"    R");
  setcolor(1);/*下面显示菜单项*/
  outtextxy(pix-4,30,"Easy(E)");
  setcolor(4);
  outtextxy(pix-4,30,"   E");
  setcolor(1);/*下面显示菜单项*/
  outtextxy(pix-4,41,"Nomall(N)");
  setcolor(4);
  outtextxy(pix-4,41,"    N");
  setcolor(1);/*下面显示菜单项*/
  outtextxy(pix-4,52,"Hard(H)");
  setcolor(4);
  outtextxy(pix-4,52,"   H");
  setcolor(1);/*下面显示菜单项*/
  outtextxy(pix-4,63,"Corse(C)");
  setcolor(4);
  outtextxy(pix-4,63,"   C");
  setcolor(1);/*下面显示菜单项*/
  outtextxy(pix-4,74,"Help(L)");
  setcolor(4);
  outtextxy(pix-4,74,"   L");
  setcolor(1);/*下面显示菜单项*/
  outtextxy(pix-4,85,"Quit(Q)");
  setcolor(4);
  outtextxy(pix-4,85,"   Q");
  bms=0;
 }/*完成菜单的描绘*/

 /*这里是为了完全实现鼠标控制才加入的内容*/
 if(Eflags==2 && (bms!=0 || ams!=-1))
 {
   goto bss;
  }

 /*下面实现菜单的功能,每一项响应一个菜单项*/
 if(cflags==0)
 {
  if((xms>=pix-6 && xms<=pix+85 && yms>=17 && yms<=28 && bms==1)|| (ams=='r' || ams=='R'))/*下面依次响应菜单中各项*/
  {
  cflags=1;
  goto bss;
  }
  else
  if((xms>=pix-6 && xms<=pix+85 && yms>=28 && yms<=39 && bms==1) || ams=='e' || ams=='E')
  {
   cflags=1;
   x=9;
   y=9;
   sum=10;
   pix=250-x*size/2;
   goto bss;
  }
  else
   if((xms>=pix-6 && xms<=pix+85 && yms>=39 && yms<=50 && bms==1) || ams=='n' || ams=='N')
   {
   cflags=1;
   x=16;
   y=16;
   sum=40;
   pix=250-x*size/2;
   goto bss;
   }
   else
    if((xms>=pix-6 && xms<=pix+85 && yms>=50 && yms<=61 && bms==1) || ams=='h' || ams=='H')
   {
    cflags=1;
    x=30;
    y=16;
    sum=99;
    pix=250-x*size/2+25;
    goto bss;
   }
   else
    if((xms>=pix-6 && xms<=pix+85 && yms>=61 && yms<=72 && bms==1) || ams=='c' || ams=='C')
    {
    cflags=1;
    Coread();
    }
    else
     if((xms>=pix-6 && xms<=pix+85 && yms>=72 && yms<=83 && bms==1) || ams=='l' || ams=='L')
    {
    cflags=1;
    Help();
    }
    else
     if((xms>=pix-6 && xms<=pix+85 && yms>=83 && yms<=94 && bms==1) || ams=='q' || ams=='Q' || ams==27)
    {
     cflags=1;
     fclose(p);
     closegraph();
     farfree(Map);
     exit(1);
    }
    else
  



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于C语言实现的扫雷游戏代码

相关文章

  • 2017-05-28简单谈谈C++ 头文件系列之(bitset)
  • 2017-05-28C/C++实现快速排序的方法
  • 2017-05-28C语言中时间的基本用法小结
  • 2017-05-28详解C++中的增量运算符++和减量运算符--的用法
  • 2017-05-28C++设计模式之简单工厂模式实例
  • 2017-05-28ShellExecute函数用法的实例代码
  • 2017-05-28C语言判断一个数是否是2的幂次方或4的幂次方
  • 2017-05-28C语言中设置用户识别码的相关函数的简单讲解
  • 2017-09-13C++内存分配的方式
  • 2017-05-28C语言 数据结构中求解迷宫问题实现方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言实现的猴子分桃问题算法解决方案
    • C语言中变量与其内存地址对应的入门知识简单讲解
    • C语言之从字符数组中删除特定的字符
    • c++ String去除头尾空格的方法
    • C++ 中的Lambda表达式写法
    • C语言字符串操作总结大全(超详细)
    • C语言 typedef:给类型起一个别名
    • 浅谈CMake配置OpenCV 时静态链接与动态链接的选择
    • 深入ORACLE变量的定义与使用的详解
    • C语言+win32api写窗体应用程序

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有