C语言设计一个炸弹超人游戏程序.docx
《C语言设计一个炸弹超人游戏程序.docx》由会员分享,可在线阅读,更多相关《C语言设计一个炸弹超人游戏程序.docx(11页珍藏版)》请在冰豆网上搜索。
C语言设计一个炸弹超人游戏程序
计算机技术基础课程设计
C语言
设计报告
题目:
用C语言设计一个炸弹超人游戏程序
学院:
电气与电子工程学院
设计日期:
题目:
用语言设计一个炸弹超人游戏程序
一、选题背景:
游戏是人们娱乐休闲的方法,是启迪思维的手段。
表面上看起来制作游戏相当复杂,其实C语言功能很强大,它不仅可以解决许多实际问题,还可以编制一些游戏程序。
下面就是关于一个炸弹超人游戏的程序。
这个游戏是一类休闲游戏中的一种。
二、设计思想:
本游戏可供两人玩,游戏的背景是绿色的,游戏双方的超人:
甲方在矩形背景的右下角,乙方在矩形背景的左上角。
双方的目的是使自己的超人尽可能地多“吃”方块,也就是为自己的超人打通道路,使绿色变为蓝色,双方可以使用自己的炸弹,但仅可以使用三次。
甲方用W,S,A,D键控制方向,乙方用上下左右键控制自己的方向,甲,乙分别用空格键和回车键控制炸弹。
用ESC键退出游戏。
游戏程序开始用一个二维数组设计初始图形,再用到了结构体定义以及使用,通过多重调用函数和结构体,完成了矩阵和移动光标的目的,运用循环和判断语句了实现游戏的可运行性。
三、程序流程图:
若想退出请按Esc键。
流程图中按“上,下,左,右”键是一种并列关系,并无顺序。
现以甲方为例,乙方同理。
开始
按W键
按S键
按A键
按D键
否 是 否 是 否 是 否 是
按空格键
按空格键
按空格键
按空格键
上移一格
下移一格
左移一格
右移一格
判断格子是否变为蓝色
是
结束
否
四、程序清单:
#include "Conio.h"
#include "graphics.h"
#include
#include
#define closegr closegraph
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define SPACE 0x3920
#define W 0x1177
#define S 0x1f73
#define A 0x1e61
#define D 0x2064
#define ENTER 0x1c0d
#define ESC 0x011b
int a[13][19]={
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{0,1,1,10,2,10,10,104,103,102,101,10,10,10,10,10,10,10,10},
{0,1,10,12,10,10,102,102,103,103,103,10,10,10,10,10,10,10,10},
{0,10,10,10,10,120,120,12,12,103,103,13,130,130,10,10,10,10,10},
{0,10,10,10,10,120,1204,102,102,103,103,130,130,130,10,10,10,10,10},
{0,10,10,10,10,120,1204,102,102,103,103,130,130,130,10,10,10,10,10},
{0,10,10,10,10,1204,1204,102,102,13,130,130,130,130,10,10,10,10,10},
{0,10,10,10,10,120,1204,120,102,103,130,130,130,130,10,10,10,10,10},
{0,10,10,10,10,120,1204,120,102,104,140,140,10,10,10,103,10,10,10},
{0,10,10,10,10,140,14,14,14,140,104,140,10,10,103,10,104,104,104},
{0,10,10,10,10,140,14,14,14,140,104,140,10,104,10,104,10,104,10},
{0,10,10,10,10,140,14,14,14,140,104,140,10,10,102,102,102,10,1},
{0,10,10,10,10,140,144,1440,1400,104,140,140,10,10,10,10,4,1,1}};
int a1=1,b1=1,mov1=1,high1=1,wide1=1,num1=1,lnum1=1,life1=100;
int a2=18,b2=12,mov2=1,high2=1,wide2=1,num2=1,lnum2=1,life2=10;
struct po{int x;int y;int lmax;int rmax;int umax;int dmax;
int feel;long time;struct po *next;};
struct po po1,po2,po3,po4,po5,po6,po7,po8,po9,po10,po11,po12,po13,po14,po15,po16,*p1,*p2;
f(x,y)
{int z;
if(a[y][x]<10)z=a[y][x];else z=a[y][x]/10;
return z;}
g(x,y)
{int z;
z=a[y][x]%10;
return z;
}
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(VGA);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
draw0(x,y)
{setfillstyle(1,14);bar(30*x+20,30*y+30,30*x+50,30*y+60);}
draw1(x,y)
{setcolor(BLUE);setfillstyle(1,GREEN);bar(30*x+20,30*y+30,30*x+50,30*y+60);}
draw2(x,y)
{setcolor(RED);line(30*x+35,30*y+30,30*x+35,30*y+60);
line(30*x+20,30*y+45,30*x+35,30*y+30);line(30*x+35,30*y+30,30*x+50,30*y+45);}
draw3(x,y)
{setcolor(RED);line(30*x+20,30*y+45,30*x+50,30*y+45);
line(30*x+35,30*y+30,30*x+50,30*y+45);line(30*x+50,30*y+45,30*x+35,30*y+60);}
draw4(x,y)
{setcolor(9);line(30*x+20,30*y+45,30*x+50,30*y+45);
line(30*x,30*y+15,30*x+30,30*y+15);circle(30*x+35,30*y+45,15);}
draw5(x,y)
{setcolor(0);setfillstyle(1,0);pieslice(30*x+35,30*y+45,0,360,15);}
draw6(x,y)
{setcolor(RED);setfillstyle(1,13);bar(30*x+20,30*y+30,30*x+50,30*y+60);}
draw7(x,y)
{setcolor(RED);circle(30*x+35,30*y+40,10);
line(30*x+35,30*y+50,30*x+35,30*y+60);line(30*x+35,30*y+50,30*x+40,30*y+60);}
draw8(x,y)
{setcolor(YELLOW);circle(30*x+35,30*y+40,10);
line(30*x+35,30*y+50,30*x+35,30*y+60);line(30*x+35,30*y+50,30*x+40,30*y+60);}
draw(x,y,z)
{switch(z){
case 0:
draw0(x,y);break;
case 1:
draw1(x,y);break;
case 2:
draw2(x,y);break;
case 3:
draw3(x,y);break;
case 4:
draw4(x,y);break;
case 5:
draw5(x,y);break;
case 6:
draw6(x,y);break;
case 7:
draw7(x,y);break;
case 8:
draw8(x,y);break;
}
}
initpic()
{int i,j;
cleardevice();
setbkcolor(WHITE);
for(j=1;j<=12;j+=1)for(i=1;i<=18;i+=1)draw(i,j,g(i,j));
draw(a1,b1,7);
draw(a2,b2,8);
}
/**************************/
eatpo1(){
if(num1<=7)
{num1+=1;lnum1+=1;switch(num1){
case 2:
po1.next=&po2;po2.next=&po1;po2.feel=0;break;
case 3:
po2.next=&po3;po3.next=&po1;po3.feel=0;break;
case 4:
po3.next=&po4;po4.next=&po1;po4.feel=0;break;
case 5:
po4.next=&po5;po5.next=&po1;po5.feel=0;break;
case 6:
po5.next=&po6;po6.next=&po1;po6.feel=0;break;
case 7:
po6.next=&po7;po7.next=&po1;po7.feel=0;break;
case 8:
po7.next=&po8;po8.next=&po1;po8.feel=0;break;}}}
eatpo2(){if(num2<=7)
{num2+=1;lnum2+=1;switch(num2){
case 2:
po9.next=&po10;po10.next=&po9;po10.feel=0;break;
case 3:
po10.next=&po11;po11.next=&po9;po11.feel=0;break;
case 4:
po11.next=&po12;po12.next=&po9;po12.feel=0;break;
case 5:
po12.n