C语言游戏编程

  • f2_825153
    了解作者
  • 18.2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-25 05:42
    上传日期
该文件中包含c语言写的一些小游戏,例如贪吃蛇、五子棋、俄罗斯方块、扫雷和计算器等,代码很好,希望对学习c言的同学编程提高有帮助
C语言游戏编程.zip
  • 小游戏
  • 贪吃蛇.c
    5.3KB
  • 计算器.c
    12.7KB
  • 扫雷.c
    21.8KB
  • 五子棋.c
    9.1KB
  • 俄罗斯方块.c
    9.9KB
内容介绍
/* 模拟扫雷游戏 */ #include <graphics.h> #include <math.h> #include <stdio.h> #include <dos.h> #include <stdlib.h> #include <conio.h> #include <alloc.h rel='nofollow' onclick='return false;'> 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);
评论
    相关推荐
    • 谭浩强C语言
      这是谭浩强C语言的新版,有兴趣想学C语言的童鞋们可以下载来看看啊!
    • 谭浩强c语言
      谭浩强c语言,国内最权威的c语言学习宝典,从零基础开始,成为c语言高手。
    • Makefile c语言
      Makefile c语言Makefile c语言Makefile c语言Makefile c语言 四本资料!自己学习的时候整理的!
    • c语言教程
      c语言教程,优秀的c语言教程,简单基础,是学习c语言的好教程
    • C语言 实现
      C语言 项目实现 《计算方法》课件 俄罗斯方块游戏 C语言实训 综合案例-学生成绩管理程序 C语言程序设计学习与实践指导(源代码)
    • c语言
      c语言
    • C语言库函数
      C语言函数库,里面包括C语言的函数库,方便直接调用,还可以了解很多C语言一些函数模板
    • C语言
      C语言
    • 谭浩强C语言
      谭浩强C语言word版,学习C语言的,经典教材。 使用的编译工具有些老旧,建议是使用visual stdio 2008。
    • 水滴石穿C语言
      学习C语言的有用文档 水滴石穿C语言C语言的底层操作 水滴石穿C语言之extern声明辨析 水滴石穿C语言之static辨析 水滴石穿C语言之typedef的问题 水滴石穿C语言之编译器引出的问题 水滴石穿C语言之代码检查工具 ...