精华内容
下载资源
问答
  • 简单的迷宫小游戏 C语言程序源代码
    2021-05-22 07:14:28

    #include

    #include

    #include

    #include

    #define Height 31 //迷宫的高度,必须为奇数

    #define Width 25 //迷宫的宽度,必须为奇数

    #define Wall 1

    #define Road 0

    #define Start 2

    #define End 3

    #define Esc 5

    #define Up 1

    #define Down 2

    #define Left 3

    #define Right 4

    int map[Height+2][Width+2];

    void gotoxy(int x,int y) //移动坐标

    {

    COORD coord;

    coord.X=x;

    coord.Y=y;

    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );

    }

    void hidden()//隐藏光标

    {

    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    CONSOLE_CURSOR_INFO cci;

    GetConsoleCursorInfo(hOut,&cci);

    cci.bVisible=0;//赋1为显示,赋0为隐藏

    SetConsoleCursorInfo(hOut,&cci);

    }

    void create(int x,int y) //随机生成迷宫

    {

    int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向

    int i,j,t;

    //将方向打乱

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

    {

    j=rand()%4;

    t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;

    t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;

    }

    map[x][y]=Road;

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

    if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall)

    {

    map[x+c[i][0]][y+c[i][1]]=Road;

    create(x+2*c[i][0],y+2*c[i][1]);

    }

    }

    int get_key() //接收按键

    {

    char c;

    while(c=getch())

    {

    if(c==27) return Esc; //Esc

    if(c!=-32)continue;

    c=getch();

    if(c==72) return Up; //上

    if(c==80) return Down; //下

    if(c==75) return Left; //左

    if(c==77) return Right; //右

    }

    return 0;

    }

    void paint(int x,int y) //画迷宫

    {

    gotoxy(2*y-2,x-1);

    switch(map[x][y])

    {

    case Start:

    printf("入");break; //画入口

    case End:

    printf("出");break; //画出口

    case Wall:

    printf("※");break; //画墙

    case Road:

    printf(" ");break; //画路

    }

    }

    void game()

    {

    int x=2,y=1; //玩家当前位置,刚开始在入口处

    int c; //用来接收按键

    while(1)

    {

    gotoxy(2*y-2,x-1);

    printf("☆"); //画出玩家当前位置

    if(map[x][y]==End) //判断是否到达出口

    {

    gotoxy(30,24);

    printf("到达终点,按任意键结束");

    getch();

    break;

    }

    c=get_key();

    if(c==Esc)

    {

    gotoxy(0,24);

    break;

    }

    switch(c)

    {

    case Up: //向上走

    if(map[x-1][y]!=Wall)

    {

    paint(x,y);

    x--;

    }

    break;

    case Down: //向下走

    if(map[x+1][y]!=Wall)

    {

    paint(x,y);

    x++;

    }

    break;

    case Left: //向左走

    if(map[x][y-1]!=Wall)

    {

    paint(x,y);

    y--;

    }

    break;

    case Right: //向右走

    if(map[x][y+1]!=Wall)

    {

    paint(x,y);

    y++;

    }

    break;

    }

    }

    }

    int main()

    {

    int i,j;

    srand((unsigned)time(NULL)); //初始化随即种子

    hidden(); //隐藏光标

    for(i=0;i<=Height+1;i++)

    for(j=0;j<=Width+1;j++)

    if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫

    map[i][j]=Road;

    else map[i][j]=Wall;

    create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数

    for(i=0;i<=Height+1;i++) //边界处理

    {

    map[i][0]=Wall;

    map[i][Width+1]=Wall;

    }

    for(j=0;j<=Width+1;j++) //边界处理

    {

    map[0][j]=Wall;

    map[Height+1][j]=Wall;

    }

    map[2][1]=Start; //给定入口

    map[Height-1][Width]=End; //给定出

    更多相关内容
  • 收集整理的简单易懂的60套C语言小游戏源代码(可运行,供学习设计参考): c语言24点游戏源码 c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 c语言五子棋源码 c语言俄罗斯方块 c语言做的一个...
  • 几个C语言小游戏源代码

    热门讨论 2011-03-26 20:59:25
    几个C语言小游戏源代码,如俄罗斯方块、贪吃蛇、五子棋等的源代码
  • C语言小游戏源代码

    千次阅读 2019-09-24 21:20:43
    在此提供C语言小游戏源码,包括扫雷游戏,贪吃蛇游戏,时钟等。 运行时只要把红色部分改为自己电脑上TC目录的BGI分目录即可。 //扫雷游戏 #include <graphics.h> #include <stdlib.h> #include &...

     在此提供C语言小游戏源码,包括扫雷游戏,贪吃蛇游戏,时钟等。

    运行时只要把红色部分改为自己电脑上TC目录的BGI分目录即可。

     

    //扫雷游戏 #include <graphics.h> #include <stdlib.h> #include <dos.h> #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define MOUSEMOVE 0xff08 struct { int num; int roundnum; int flag; }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,"D://tc20//BGI"); } 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(_BX&1); } int RightPress(void) { _AX=0x03; geninterrupt(0x33); return(_BX&2); } 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(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85) { 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;i<10;i++) for(j=0;j<10;j++) DrawEmpty(i,j,0,8); setcolor(7); DrawSmile(); randomize();//__page_break__ for(i=0;i<10;i++) for(j=0;j<10;j++) { Mine[i][j].num=random(8); if(Mine[i][j].num==1) mineNUM++; 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;i<10;i++) for(j=0;j<10;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==0&&j==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==0&&j==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==9&&j==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==9&&j==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++; }//__page_break__ 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==0&&Mine[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; return ; } if(i!=0&&Mine[i-1][j].num!=1) ShowWhite(i-1,j); if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1) ShowWhite(i-1,j+1); if(j!=9&&Mine[i][j+1].num!=1) ShowWhite(i,j+1); if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1) ShowWhite(i+1,j+1); if(i!=9&&Mine[i+1][j].num!=1) ShowWhite(i+1,j); if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1) ShowWhite(i+1,j-1); if(j!=0&&Mine[i][j-1].num!=1) ShowWhite(i,j-1); if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1) ShowWhite(i-1,j-1); } void GamePlay(void) { int i,j,Num; for(i=0;i<10;i++) for(j=0;j<10;j++) Mine[i][j].roundnum=MineStatistics(i,j); while(!kbhit()) { if(LeftPress()) { MouseGetXY(); if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85) { MouseOff(); gameAGAIN=1; break; } if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290) { j=(MouseX-190)/20; i=(MouseY-90)/20; 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; if(mineNUM<1) { GameWin(); break; } } } } } if(RightPress()) { MouseGetXY(); if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290) { j=(MouseX-190)/20; i=(MouseY-90)/20; MouseOff(); if(Mine[i][j].flag==0&&Mine[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); } } }

    //时钟 #include<graphics.h> #include<math.h> #include<dos.h> #define pi 3.1415926 #define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300; #define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240; #define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y) void init() {int i,l,x1,x2,y1,y2; setbkcolor(0); circle(300,240,200); circle(300,240,205); circle(300,240,5); for(i=0;i<60;i++) {if(i%5==0) l=15; else l=5; x1=200*cos(i*6*pi/180)+300; y1=200*sin(i*6*pi/180)+240; x2=(200-l)*cos(i*6*pi/180)+300; y2=(200-l)*sin(i*6*pi/180)+240; line(x1,y1,x2,y2); } } main() { int x,y; int gd=VGA,gm=2; unsigned char h,m,s; struct time t[1]; initgraph(&gd,&gm,"d://tc20//BGI"); init(); setwritemode(1); gettime(t); h=t[0].ti_hour; m=t[0].ti_min; s=t[0].ti_sec; setcolor(7); d(150,h,30); setcolor(14); d(170,m,6); setcolor(4); d(190,s,6); while(!kbhit()) {while(t[0].ti_sec==s) gettime(t); sound(400); delay(70); sound(200); delay(30); nosound(); setcolor(4); d(190,s,6); s=t[0].ti_sec; d(190,s,6); if (t[0].ti_min!=m) { setcolor(14); d(170,m,6); m=t[0].ti_min; d(170,m,6); } if (t[0].ti_hour!=h) { setcolor(7); d(150,h,30); h=t[0].ti_hour; d(150,h,30); sound(1000); delay(240); nosound(); delay(140); sound(2000); delay(240); nosound(); } } getch(); closegraph(); }

    //贪吃蛇 #define N 200 #include <graphics.h> #include <stdlib.h> #include <dos.h> #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0; int gamespeed=50000; struct Food { int x; int y; int yes; }food; struct Snake { int x[N]; int y[N]; int node; int direction; int life; }snake; void Init(void); void Close(void); void DrawK(void); void GameOver(void); void GamePlay(void); void PrScore(void); void main(void) { Init(); DrawK(); GamePlay(); Close(); } void Init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"D://tc20//BGI"); cleardevice(); } void DrawK(void) { setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH); for(i=50;i<=600;i+=10) { rectangle(i,40,i+10,49); rectangle(i,451,i+10,460); } for(i=40;i<=450;i+=10) { rectangle(50,i,59,i+10); rectangle(601,i,610,i+10); } } void GamePlay(void) { randomize(); food.yes=1; snake.life=0; snake.direction=1; snake.x[0]=100;snake.y[0]=100; snake.x[1]=110;snake.y[1]=100; snake.node=2; PrScore(); while(1) { while(!kbhit()) { if(food.yes==1) { food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0) food.x++; while(food.y%10!=0) food.y++; food.yes=0; } if(food.yes==0) { setcolor(GREEN); rectangle(food.x,food.y,food.x+10,food.y-10); } for(i=snake.node-1;i>0;i--) { snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; } switch(snake.direction) { case 1:snake.x[0]+=10;break; case 2: snake.x[0]-=10;break; case 3: snake.y[0]-=10;break; case 4: snake.y[0]+=10;break; } for(i=3;i<snake.node;i++) { if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { GameOver(); snake.life=1; break; } } if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55|| snake.y[0]>455) { GameOver(); snake.life=1; } if(snake.life==1) break; if(snake.x[0]==food.x&&snake.y[0]==food.y) { setcolor(0); rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20;snake.y[snake.node]=-20; snake.node++; food.yes=1; score+=10; PrScore(); } setcolor(4); for(i=0;i<snake.node;i++) rectangle(snake.x[i],snake.y[i],snake.x[i]+10, snake.y[i]-10); delay(gamespeed); setcolor(0); rectangle(snake.x[snake.node-1],snake.y[snake.node-1], snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); } if(snake.life==1) break; key=bioskey(0); if(key==ESC) break; else if(key==UP&&snake.direction!=4) snake.direction=3; else if(key==RIGHT&&snake.direction!=2) snake.direction=1; else if(key==LEFT&&snake.direction!=1) snake.direction=2; else if(key==DOWN&&snake.direction!=3) snake.direction=4; } } void GameOver(void) { cleardevice(); PrScore(); setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,"GAME OVER"); getch(); } void PrScore(void) { char str[10]; setfillstyle(SOLID_FILL,YELLOW); bar(50,15,220,35); setcolor(6); settextstyle(0,0,2); sprintf(str,"score:%d",score); outtextxy(55,20,str); } void Close(void) { getch(); closegraph(); }

    //鼠标控制 #include <dos.h> #include <bios.h> #include <malloc.h> #include <stdlib.h> #include <stdio.h> #include "graphics.h" #define R 15 void initgr(void) { int gd = DETECT, gm = 0; initgraph(&gd, &gm, "D://TC20//BGI"); } void getmouse(int *x,int *y,int *key) { union REGS inregs,outregs; inregs.x.ax=3; int86(0x33,&inregs,&outregs); *x=outregs.x.cx; *y=outregs.x.dx; *key=outregs.x.bx; } void visbilemouse() { union REGS inregs,outregs; inregs.x.ax=0x01; int86(0x33,&inregs,&outregs); } void mouse(int *x,int *y,int *z) { int a=0,b=0,c=0,a_old=0,b_old=0; int *ball; ball=malloc(imagesize(a,b,a+R,b+R)); getimage(a,b,a+R,b+R,ball); while(c==0) { getmouse(&a,&b,&c); if(a<0) a=0; if(b<0) b=0; if(a>getmaxx()-R) a=getmaxx()-R; if(b>getmaxy()-R) b=getmaxy()-R; if(a!=a_old || b!=b_old) { putimage(a_old,b_old,ball,0); getimage(a,b,a+R,b+R,ball); setcolor(GREEN); setlinestyle(0,0,1); line(a,b,a+R,b+R/2); line(a,b,a+R/2,b+R); line(a+R,b+R/2,a+R/2,b+R); line(a+R*3/4,b+R*3/4,a+R,b+R); } a_old=a;b_old=b; } *x=a;*y=b;*z=c; putimage(a,b,ball,0); free(ball); } void main() { int x,y,z; initgr(); visbilemouse(); do { setcolor(WHITE); rectangle(175,8,220,25); outtextxy(180,10,"exit"); mouse(&x,&y,&z); if(z==1) { setlinestyle(0,0,1); setcolor(12); circle(x,y,1); } if(z==2) {setfillstyle(1,BLACK); bar(0,0,getmaxx(),getmaxy()); } }while(x<175 || x>220 || y<8 || y>25); closegraph(); }

     

     

    转载于:https://www.cnblogs.com/Joyin/archive/2009/05/27/2262134.html

    展开全文
  • 贪吃蛇游戏源代码,codeblocks写的c语言小游戏源代码,可以运行。
  • 个人收集,简单易懂,思路清晰,直接运行。 包括推箱子、超级玛丽、俄罗斯方块等游戏。比淘宝的项目好。买到就是赚到!
  • 200个小游戏C语言源代码,和大家分享,喜欢的就下载吧!
  • 62套C语言小游戏源码

    2018-12-31 19:35:15
    这是楼主珍藏的62套C语言小游戏源码,包含吃豆人、俄罗斯方块、别踩白块等诸多经典小游戏。感兴趣的朋友可以下载下来研究。
  • c语言小游戏源代码

    2012-04-16 22:47:33
    c语言小游戏源代码
  • 可以学习2048的算法
  • 使用vs编译的二维小游戏,里面有很多小游戏和网站模板,比如超级玛丽、坦克大战、推箱子、别踩白块、贪吃蛇、种地浇水、盒子接球、连连看、军棋、五子棋、火车订票系统、图书馆借阅、涂格子游戏、火柴人游戏、大丰收...
  • C语言小游戏源代码《贪吃蛇》,很经典的原始小游戏
  • C语言小游戏源程序,C语言小游戏源程序,游戏代码,c语言代码
  • 经典小游戏 C语言 源代码 贪吃蛇 经典小游戏 C语言 源代码 贪吃蛇
  • 一个简易的、用C语言写的五子棋游戏源代码,仅供参考!
  • 扫雷游戏C语言小游戏源代码,包含了详细的代码,可以在VC++环境下运行
  • C语言小游戏源码

    千次阅读 2021-05-19 12:45:48
    在此提供C语言小游戏源码,包括扫雷游戏,贪吃蛇游戏,时钟等。运行时只要把红色部分改为自己电脑上TC目录的BGI分目录即可。//扫雷游戏#include #include #include #define LEFTPRESS 0xff01#define LEFTCLICK 0xff...

    在此提供C语言小游戏源码,包括扫雷游戏,贪吃蛇游戏,时钟等。

    运行时只要把红色部分改为自己电脑上TC目录的BGI分目录即可。

    //扫雷游戏

    #include

    #include

    #include

    #define LEFTPRESS 0xff01

    #define LEFTCLICK 0xff10

    #define LEFTDRAG 0xff19

    #define MOUSEMOVE 0xff08

    struct

    {

    int num;

    int roundnum;

    int flag;

    }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,"D:\\tc20\\BGI");

    }

    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(_BX&1);

    }

    int RightPress(void)

    {

    _AX=0x03;

    geninterrupt(0x33);

    return(_BX&2);

    }

    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(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)

    {

    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;i<10;i++)

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

    DrawEmpty(i,j,0,8);

    setcolor(7);

    DrawSmile();

    randomize();//__page_break__

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

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

    {

    Mine[i][j].num=random(8);

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

    mineNUM++;

    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;i<10;i++)

    for(j=0;j<10;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==0&&j==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==0&&j==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==9&&j==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==9&&j==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++;

    }//__page_break__

    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==0&&Mine[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;

    return ;

    }

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

    ShowWhite(i-1,j);

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

    ShowWhite(i-1,j+1);

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

    ShowWhite(i,j+1);

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

    ShowWhite(i+1,j+1);

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

    ShowWhite(i+1,j);

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

    ShowWhite(i+1,j-1);

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

    ShowWhite(i,j-1);

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

    ShowWhite(i-1,j-1);

    }

    void GamePlay(void)

    {

    int i,j,Num;

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

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

    Mine[i][j].roundnum=MineStatistics(i,j);

    while(!kbhit())

    {

    if(LeftPress())

    {

    MouseGetXY();

    if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)

    {

    MouseOff();

    gameAGAIN=1;

    break;

    }

    if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)

    {

    j=(MouseX-190)/20;

    i=(MouseY-90)/20;

    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;

    if(mineNUM<1)

    {

    GameWin();

    break;

    }

    }

    }

    }

    }

    if(RightPress())

    {

    MouseGetXY();

    if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)

    {

    j=(MouseX-190)/20;

    i=(MouseY-90)/20;

    MouseOff();

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

    }

    }

    }

    //时钟

    #include

    #include

    #include

    #define pi 3.1415926

    #define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300;

    #define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240;

    #define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y)

    void init()

    {int i,l,x1,x2,y1,y2;

    setbkcolor(0);

    circle(300,240,200);

    circle(300,240,205);

    circle(300,240,5);

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

    {if(i%5==0) l=15;

    else l=5;

    x1=200*cos(i*6*pi/180)+300;

    y1=200*sin(i*6*pi/180)+240;

    x2=(200-l)*cos(i*6*pi/180)+300;

    y2=(200-l)*sin(i*6*pi/180)+240;

    line(x1,y1,x2,y2);

    }

    }

    main()

    {

    int x,y;

    int gd=VGA,gm=2;

    unsigned char h,m,s;

    struct time t[1];

    initgraph(&gd,&gm,"d:\\tc20\\BGI");

    init();

    setwritemode(1);

    gettime(t);

    h=t[0].ti_hour;

    m=t[0].ti_min;

    s=t[0].ti_sec;

    setcolor(7);

    d(150,h,30);

    setcolor(14);

    d(170,m,6);

    setcolor(4);

    d(190,s,6);

    while(!kbhit())

    {while(t[0].ti_sec==s)

    gettime(t);

    sound(400);

    delay(70);

    sound(200);

    delay(30);

    nosound();

    setcolor(4);

    d(190,s,6);

    s=t[0].ti_sec;

    d(190,s,6);

    if (t[0].ti_min!=m)

    {

    setcolor(14);

    d(170,m,6);

    m=t[0].ti_min;

    d(170,m,6);

    }

    if (t[0].ti_hour!=h)

    { setcolor(7);

    d(150,h,30);

    h=t[0].ti_hour;

    d(150,h,30);

    sound(1000);

    delay(240);

    nosound();

    delay(140);

    sound(2000);

    delay(240);

    nosound();

    }

    }

    getch();

    closegraph();

    }

    //贪吃蛇

    #define N 200

    #include

    #include

    #include

    #define LEFT 0x4b00

    #define RIGHT 0x4d00

    #define DOWN 0x5000

    #define UP 0x4800

    #define ESC 0x011b

    int i,key;

    int score=0;

    int gamespeed=50000;

    struct Food

    {

    int x;

    int y;

    int yes;

    }food;

    struct Snake

    {

    int x[N];

    int y[N];

    int node;

    int direction;

    int life;

    }snake;

    void Init(void);

    void Close(void);

    void DrawK(void);

    void GameOver(void);

    void GamePlay(void);

    void PrScore(void);

    void main(void)

    {

    Init();

    DrawK();

    GamePlay();

    Close();

    }

    void Init(void)

    {

    int gd=DETECT,gm;

    initgraph(&gd,&gm,"D:\\tc20\\BGI");

    cleardevice();

    }

    void DrawK(void)

    {

    setcolor(11);

    setlinestyle(SOLID_LINE,0,THICK_WIDTH);

    for(i=50;i<=600;i+=10)

    {

    rectangle(i,40,i+10,49);

    rectangle(i,451,i+10,460);

    }

    for(i=40;i<=450;i+=10)

    {

    rectangle(50,i,59,i+10);

    rectangle(601,i,610,i+10);

    }

    }

    void GamePlay(void)

    {

    randomize();

    food.yes=1;

    snake.life=0;

    snake.direction=1;

    snake.x[0]=100;snake.y[0]=100;

    snake.x[1]=110;snake.y[1]=100;

    snake.node=2;

    PrScore();

    while(1)

    {

    while(!kbhit())

    {

    if(food.yes==1)

    {

    food.x=rand()%400+60;

    food.y=rand()%350+60;

    while(food.x%10!=0)

    food.x++;

    while(food.y%10!=0)

    food.y++;

    food.yes=0;

    }

    if(food.yes==0)

    {

    setcolor(GREEN);

    rectangle(food.x,food.y,food.x+10,food.y-10);

    }

    for(i=snake.node-1;i>0;i--)

    {

    snake.x[i]=snake.x[i-1];

    snake.y[i]=snake.y[i-1];

    }

    switch(snake.direction)

    {

    case 1:snake.x[0]+=10;break;

    case 2: snake.x[0]-=10;break;

    case 3: snake.y[0]-=10;break;

    case 4: snake.y[0]+=10;break;

    }

    for(i=3;i

    {

    if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

    {

    GameOver();

    snake.life=1;

    break;

    }

    }

    if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||

    snake.y[0]>455)

    {

    GameOver();

    snake.life=1;

    }

    if(snake.life==1)

    break;

    if(snake.x[0]==food.x&&snake.y[0]==food.y)

    {

    setcolor(0);

    rectangle(food.x,food.y,food.x+10,food.y-10);

    snake.x[snake.node]=-20;snake.y[snake.node]=-20;

    snake.node++;

    food.yes=1;

    score+=10;

    PrScore();

    }

    setcolor(4);

    for(i=0;i

    rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

    snake.y[i]-10);

    delay(gamespeed);

    setcolor(0);

    rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

    snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

    }

    if(snake.life==1)

    break;

    key=bioskey(0);

    if(key==ESC)

    break;

    else

    if(key==UP&&snake.direction!=4)

    snake.direction=3;

    else

    if(key==RIGHT&&snake.direction!=2)

    snake.direction=1;

    else

    if(key==LEFT&&snake.direction!=1)

    snake.direction=2;

    else

    if(key==DOWN&&snake.direction!=3)

    snake.direction=4;

    }

    }

    void GameOver(void)

    {

    cleardevice();

    PrScore();

    setcolor(RED);

    settextstyle(0,0,4);

    outtextxy(200,200,"GAME OVER");

    getch();

    }

    void PrScore(void)

    {

    char str[10];

    setfillstyle(SOLID_FILL,YELLOW);

    bar(50,15,220,35);

    setcolor(6);

    settextstyle(0,0,2);

    sprintf(str,"score:%d",score);

    outtextxy(55,20,str);

    }

    void Close(void)

    {

    getch();

    closegraph();

    }

    //鼠标控制

    #include

    #include

    #include

    #include

    #include

    #include "graphics.h"

    #define R 15

    void initgr(void)

    {

    int gd = DETECT, gm = 0;

    initgraph(&gd, &gm, "D:\\TC20\\BGI");

    }

    void getmouse(int *x,int *y,int *key)

    {

    union REGS inregs,outregs;

    inregs.x.ax=3;

    int86(0x33,&inregs,&outregs);

    *x=outregs.x.cx;

    *y=outregs.x.dx;

    *key=outregs.x.bx;

    }

    void visbilemouse()

    {

    union REGS inregs,outregs;

    inregs.x.ax=0x01;

    int86(0x33,&inregs,&outregs);

    }

    void mouse(int *x,int *y,int *z)

    {

    int a=0,b=0,c=0,a_old=0,b_old=0;

    int *ball;

    ball=malloc(imagesize(a,b,a+R,b+R));

    getimage(a,b,a+R,b+R,ball);

    while(c==0)

    {

    getmouse(&a,&b,&c);

    if(a<0) a=0;

    if(b<0) b=0;

    if(a>getmaxx()-R) a=getmaxx()-R;

    if(b>getmaxy()-R) b=getmaxy()-R;

    if(a!=a_old || b!=b_old)

    {

    putimage(a_old,b_old,ball,0);

    getimage(a,b,a+R,b+R,ball);

    setcolor(GREEN);

    setlinestyle(0,0,1);

    line(a,b,a+R,b+R/2);

    line(a,b,a+R/2,b+R);

    line(a+R,b+R/2,a+R/2,b+R);

    line(a+R*3/4,b+R*3/4,a+R,b+R);

    }

    a_old=a;b_old=b;

    }

    *x=a;*y=b;*z=c;

    putimage(a,b,ball,0);

    free(ball);

    }

    void main()

    {

    int x,y,z;

    initgr();

    visbilemouse();

    do

    {

    setcolor(WHITE);

    rectangle(175,8,220,25);

    outtextxy(180,10,"exit");

    mouse(&x,&y,&z);

    if(z==1)

    {

    setlinestyle(0,0,1);

    setcolor(12);

    circle(x,y,1);

    }

    if(z==2)

    {setfillstyle(1,BLACK);

    bar(0,0,getmaxx(),getmaxy());

    }

    }while(x<175 || x>220 ||

    y<8 || y>25);

    closegraph();

    }

    本源码整理于互联网

    展开全文
  • 源代码使用方法是(以实例1为例): 将该实例的源码,比如实例1的1.c文件(可以在001目录下找到), 拷贝到tc编译器目录下,运行tc.exe,打开编译器, 按【F3】键或者“File->Open”菜单命令,打开1.c文件, ...
  • C语言小项目代码大全.一些小游戏及管理系统
  • 扫雷游戏C语言小游戏源代码.pdf格式的。。。
  • 五子棋,贪吃蛇,俄罗斯方块小游戏 c语言源代码 实测可以玩
  • c语言小游戏c语言项目源码大全合集(60例): c语言24点游戏源码 c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 c语言五子棋源码 c语言俄罗斯方块 c语言做的一个任务管理器 c语言做的播放器...
  • 二、game.c各游戏功能函数的讲解1.InitBoard 初始化数组函数讲解2.DisplayBoard 打印格子函数讲解3.Setmine 电脑生成雷 函数讲解4.GetMineCount 格子表示周围雷的... 函数讲解5.FindMine 排雷函数实现game.c源代码展示...


    前言

    在完成三子棋小游戏后(三子棋具体实现参考博主上一篇代码),相信我们一定对分模块完成代码,分别实现不用的功能的编程思想有了稍加深刻的理解与认识,接下来为了巩固与练习自己的思维,我们可以试着完成相对三子棋更加难一丢丢的扫雷小游戏,下面就和博主一起来完成扫雷游戏的代码实现把~

    附上gitee地址(完整代码都已上传,需要的话可自行查阅):
    https://gitee.com/yang-xinshang


    一、扫雷小游戏整体思路讲解。

    和三子棋小游戏一样。这次我们的代码依旧书写在 test.c (游戏整体实现思路), game.c(游戏功能函数实现),以及 game.h (代码用到的所有头文集,函数声明,符号定义存放位置)来书写我们的扫雷代码。
    在进行扫雷小游戏整体思路讲解之前,我们先来看一看test.c 源代码:

    在游戏代码实现开始前我们先要明确一个点:如果玩家选择的点在边界上,坚持周围是否有雷的时候数组就会出现越界,所以我们初始化棋盘(二维数组时应该多出一行一列),我们的扫雷不写太难,棋盘就定义为9x9二维数组,所以初始化时候就初始化成11x11的二位数组。(定义内容放在 game.h)文件中

    #define _CRT_SECURE_NO_WARNINGS 1
    
    #include "game.h"
    
    void meum()
    {
    	printf("********************************\n");
    	printf("*********   1.play   ***********\n");
    	printf("*********   0.exit   ***********\n");
    	printf("********************************\n");
    
    }
    void game()
    {
    	char mine[ROWS][COLS] = { 0 }; //存放雷的信息
    	char show[ROWS][COLS] = { 0 };// 存放排查出的雷的信息
    	// 初始化棋盘
    	InitBoard(mine, ROWS, COLS,'0' );
    	InitBoard(show, ROWS, COLS,'*' );
    	
    	DisplayBoard(mine, ROW, COL);
    	DisplayBoard(show, ROW, COL);
    	
    	Setmine(mine, ROW, COL);
    
    	FindMine(mine,show, ROW, COL);
    
    
    }
    
    
    
    int main()
    {
    	srand((unsigned int)time(NULL));
    	int input = 0;
    
    	do{
    		meum();
    		printf("请选择:\n");
    		scanf("%d", &input);
    		switch (input)
    		{
    		case 1:
    			game();
    			break;
    		case 0:
    			printf("退出游戏\n");
    			break;
    		default:
    			printf("输入错误,请重新输入\n");
    			break;
    		}
    	} while (input);
    	return 0;
    }
    
    
    
    

    这里我们可以看到游戏整个流程大致是这样的:
    先用do…while语句实现游戏功能的选择循环实现,并定义出菜单meum()函数将其打印,接下来就是重点游戏函数的实现,放在 game.c文件中。

    二、game.c各游戏功能函数的讲解

    1.InitBoard 初始化数组函数讲解

    代码如下:

    void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
    {
    	int i = 0;
    	for (i = 0; i < rows; i++)
    	{
    		int j = 0;
    		for (j = 0; j < cols; j++)
    		{
    			board[i][j] = set;
    		}
    	}
    }
    

    在这里我们将游戏数组(mine)初始化全为 0 ,展现数组(show)初始化全为 * 。

    2.DisplayBoard 打印格子函数讲解

    代码如下(示例):

    void DisplayBoard(char board[ROWS][COLS], int row, int col)
    {
    	int i = 0;
    	printf("-----------------------------\n");
    	for (i = 0; i <= 9 ; i++)
    	{
    		printf("%d ", i);
    	}
    	printf("\n");
    
    	for (i = 1; i <= row; i++)
    	{
    		int j = 0;
    		printf("%d ", i);
    		for (j = 1; j <= col; j++)
    		{
    			printf("%c ", board[i][j]);
    		}
    		printf("\n");
    	}
    	printf("-----------------------------\n");
    
    }
    

    在这里将上面初始化好的数组(格子)打印出来,并且打印上每行每列的坐标,注意横纵坐标从1开始,方便玩家输入坐标,并且打印上分割线。

    3.Setmine 电脑生成雷 函数讲解

    看代码:

    void Setmine(char board[ROWS][COLS], int row, int col)
    {
    	int count = EASY_COUNT;
    	while (count)
    	{
            int x = rand() % row + 1; // 1-9
    	    int y = rand() % col + 1;
    		if (board[x][y] != '1')
    		{
    			board[x][y] = '1';
    			count--;
    		}
    	}
    }
    

    EASY_COUNT是我们定义出来的雷的个数,为10个。这里随机数生成方面和三子棋类似(方法具体讲解参考上文),注意的是我们要的是1-9之间的数字,所以在随机数子生成后加1。 雷以 ‘1‘ (字符1)的形式放在格子中。

    4.GetMineCount 格子表示周围雷的个数 函数讲解

    代码如下:

    int GetMineCount(char mine[ROWS][COLS], int x, int y)
    {
    	return (mine[x][y - 1] + mine[x][y + 1] + mine[x - 1][y] + mine[x + 1][y] + mine[x - 1][y - 1] + mine[x + 1][y + 1] + mine[x + 1][y - 1]) + mine[x + 1][y + 1] - 8 * '0';
    }
    

    这里把周围坐标正确表示即可计算。需要注意一个知识点: eg. ‘3’-‘0’=3 字符3-字符0=数字0,以此类推。

    5.FindMine 排雷函数实现

    代码如下:

    void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
    {
    	int x = 0;
    	int y = 0;
    	int win = 0;
    	while (win < row*col - EASY_COUNT) //一共10个雷,71个空格子,排出即获胜。
    	{
    		printf("请输入你要排查的坐标: ");
    		scanf("%d %d", &x, &y);
    		if (x >= 1 && x <= row && y >= 1 && y <= col)
    		{
    			if (mine[x][y] == '1')
    			{
    				printf("很遗憾,游戏失败\n"); //踩雷
    				DisplayBoard(mine, ROW, COL); //打印出看结果
    			}
    			else
    			{
    				int count = GetMineCount(mine, x, y);
    				show[x][y] = count + '0'; //空格子计数周围雷
    				DisplayBoard(show, ROW, COL);
    				win++; //排出一个win自增1
    			}
    
    		}
    		else
    		{
    			printf("坐标非法,请重新输入\n");
    		}
    
    	}
    	if (win == row*col - EASY_COUNT)
    	{
    		printf("恭喜你!排雷成功\n");
    		DisplayBoard(mine, ROW, COL);
    	}
    }
    
    

    需要注意的点在代码中注释展示。

    game.c源代码展示:

    下面放上整个game.c源代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include "game.h"
    void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
    {
    	int i = 0;
    	for (i = 0; i < rows; i++)
    	{
    		int j = 0;
    		for (j = 0; j < cols; j++)
    		{
    			board[i][j] = set;
    		}
    	}
    }
    void DisplayBoard(char board[ROWS][COLS], int row, int col)
    {
    	int i = 0;
    	printf("-----------------------------\n");
    	for (i = 0; i <= 9 ; i++)
    	{
    		printf("%d ", i);
    	}
    	printf("\n");
    
    	for (i = 1; i <= row; i++)
    	{
    		int j = 0;
    		printf("%d ", i);
    		for (j = 1; j <= col; j++)
    		{
    			printf("%c ", board[i][j]);
    		}
    		printf("\n");
    	}
    	printf("-----------------------------\n");
    
    }
    
    void Setmine(char board[ROWS][COLS], int row, int col)
    {
    	int count = EASY_COUNT;
    	while (count)
    	{
            int x = rand() % row + 1; // 1-9
    	    int y = rand() % col + 1;
    		if (board[x][y] != '1')
    		{
    			board[x][y] = '1';
    			count--;
    		}
    	}
    }
    
    int GetMineCount(char mine[ROWS][COLS], int x, int y)
    {
    	return (mine[x][y - 1] + mine[x][y + 1] + mine[x - 1][y] + mine[x + 1][y] + mine[x - 1][y - 1] + mine[x + 1][y + 1] + mine[x + 1][y - 1]) + mine[x + 1][y + 1] - 8 * '0';
    }
    
    
    void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
    {
    	int x = 0;
    	int y = 0;
    	int win = 0;
    	while (win < row*col - EASY_COUNT)
    	{
    		printf("请输入你要排查的坐标: ");
    		scanf("%d %d", &x, &y);
    		if (x >= 1 && x <= row && y >= 1 && y <= col)
    		{
    			if (mine[x][y] == '1')
    			{
    				printf("很遗憾,游戏失败\n");
    				DisplayBoard(mine, ROW, COL);
    			}
    			else
    			{
    				int count = GetMineCount(mine, x, y);
    				show[x][y] = count + '0';
    				DisplayBoard(show, ROW, COL);
    				win++;
    			}
    
    		}
    		else
    		{
    			printf("坐标非法,请重新输入\n");
    		}
    
    	}
    	if (win == row*col - EASY_COUNT)
    	{
    		printf("恭喜你!排雷成功\n");
    		DisplayBoard(mine, ROW, COL);
    	}
    }
    

    三.game.h 头文件代码展示

    #pragma once
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define EASY_COUNT 10
    
    #define ROW 9
    #define COL 9
    
    #define ROWS ROW+2
    #define COLS COL+2
    
    void InitBoard(char board[ROWS][COLS], int row, int col, char set);
    void DisplayBoard(char board[ROWS][COLS], int row, int col);
    void Setmine(char board[ROWS][COLS], int row,int col);
    void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col);
    int GetMineCount(char board[ROWS][COLS], int x, int y);
    
    
    
    

    这里放上整个项目需要用到的头文集以及函数声明,符号定义即可。(分开书写能使代码风格整体良好)


    总结

    以上就是整个扫雷游戏的实现思路以及源代码,欢迎大家指正~
    以上就是今天要讲的扫雷小游戏实现,本文仅仅简单介绍了简单的扫雷小游戏,然而依旧还有更多的功能等待大家去实现,欢迎大家补充讨论!

    如果觉得文章对自己有帮助,欢迎大家多多点赞评论,跪谢!!!

    展开全文
  • C语言经典游戏程序设计源代码,包含扫雷,贪吃蛇,推箱子等
  • 玩转c语言——c语言小游戏 迷宫小游戏(附源码)

    千次阅读 多人点赞 2021-10-02 08:35:24
    要制作迷宫小游戏,我们要利用二维数组搭建场景,制作一个简易的迷宫 #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<conio.h>//小游戏所需的所有头文件 int main...
  • c/c++小游戏源代码

    千次阅读 2021-05-23 10:06:58
    翻到开学之初写的一些小游戏,陆续给大家发出来,也便提高新手们的编程兴趣。(已详细注释)几个对应头文件需要注意一下,但不必太过恐慌,因为,,,很多,用的时候找需要的即可(在Dev,codeblocks,VC上都能运行)#...
  • C语言扫雷游戏源代码

    2021-05-28 05:26:08
    C语言扫雷游戏源代码/*模拟扫雷游戏*/#include #include #include #include #include #include #include union REGS regs;int size=15;/*用于表示每个方块的大小(正方形的边长)*/int pix,piy=50;/*pix,piy是矩阵的...
  • C语言游戏代码大全

    2018-02-18 11:29:44
    双人贪吃蛇,别踩白方块,玫瑰花,矿井逃生等多种C语言游戏代码等你来实践!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,060
精华内容 8,424
关键字:

c语言小游戏源代码