当前位置:文档之家› 计算机程序设计(C语言)

计算机程序设计(C语言)

dN=dN*(-1); if(((ballM<barM)||(ballM>barM+60))&&(ballN>410)) {
sleep(1); k=1; return; } }
8
/*球拍的运动*/ key=bioskey(0); m=barM; n=barN; if(key==LEFT) {
barM-=66; setfillstyle(SOLID_FILL,BLUE); bar(m,n,m+60,n+4); setfillstyle(SOLID_FILL,RED); bar(barM,barN,barM+60,barN+4); } else if(key==RIGHT) { barM+=66; setfillstyle(SOLID_FILL,BLUE); bar(m,n,m+60,n+4); setfillstyle(SOLID_FILL,RED); bar(barM,barN,barM+60,barN+4); } else if(key==ESC) { k=0; break; } } }
计算机程序设计(C 语言) 课程设计报告
题目:用 C 语言实现弹球游戏
学 院: 专 业: 班 级: 姓 名: 指导教师: 设计日期:
一、选题背景: 我 们 日 常 生 活 中 的 小 游 戏 机 、手 机 上 ,经 常 会 有 贪 吃
蛇 、拼 图 游 戏 、俄 罗 斯 方 块 、推 箱 子 、弹 球 等 小 游 戏 ,这 些小游戏看起来复杂,其实根据我们所学的知识,利用 C 语言亦可编译程序来实现。下面就是通过 C 语言程序实
/*初始化图形*/ void initgr() {
int gd=DETECT,gm; initgraph(&gd,&gm,""); }
/*画出初始图*/ void picture() {
int m,n,i,color; setcolor(GREEN); outtextxy(0,0,"ANY KEY ..."); while(!kbhit()) {
int barM=300,barN=400,m,n;
randomize();
ballM=rand()%620+10;
ballN=rand()%200+190;
for(;;)
/*受侦察的指点....*/
{
7
/*小球的运动*/ while(!kbhit()) {
if((ballM<=10)||(ballM>=630)) dM=dM*(-1);
}
delay(3000000);
setcolor(BLUE);
for(r1=6;r1>=1;r1--)
{
circle(m+1,n+1,r1);
delay(1000000);
}
for(i=1;i<=50;i++)
{
point_color=rand()%15;
pointM=(rand()%32+m);
pointN=(rand()%15+n);
/*存放方块的信息*/ struct box
4
{ int m; int n; int key;
被击中过*/ }a[10][20];
/*方块右上角横坐标*/ /*方块右上角纵坐标*/ /*方块是否被击中过,1 表示被击中过,0 表示没有
int k; 正常退出*/
/*用来判断游戏的结束方式,0:按 ESC 退出,1:
游 戏 结 束 界 面 : 若 任 务 未 完 成 结 束 游 戏 则 出 现 ‘ YOU AR E SI L L Y !’, 图 形 自 动 跳 转 到 ‘ GA M E OV E R ’ 图 形 , 然 后 自 动 关 闭 。若 任 务 完 成 游 戏 结 束 或 强 制 结 束 ,则 出 现‘ GA M E OVER’ 图 形 , 然 后 自 动 关 闭 。
四、程序流程图:
开始 存放方块信息 初始化图形
3
无按键 与否

假 小球运动
反弹 ( k=o)
出界与反 弹
出界 ( k=1)
是否击中方 块

方块是否击 过
假 爆裂效果
球拍左或 右运动
假 真
右运动
方块是否 全被击
真 游戏结束
关闭图形
五、程序清单:
#include"stdio.h" #include"graphics.h" #include"stdlib.h" #include"bios.h" #define LEFT 0x4b00 #define RIGHT 0x4d00 #define ESC 0x011b
六、设计结果说明 1、设计优点:
能够手动控制游戏结束,实现人机互动,操作比较简单。 多种颜色配置,桌面美观。该程序可以进行多处改动,使画面更 加美观。程序简单,层次分明,容易理解。 能够控制小球的运动速度,调快调慢,操作自如。 2.设计不足: 小球的运动路线单一—直线制,不能进行曲线运动。
10
2
键程序将处于无限循环状态,若按任意键程序将向下执行。同时 kbhit()实现球运动的控制。 利用 cleardevice()实现清除图形功能。 爆裂艺术效果的实现:利用 setcolour(),putpixel()(在指定位置画 一点)delay()(暂停)以及 for 循环实现爆裂效果。 2.技术关键: delay()的暂停功能。 cleardevice()的擦出整个图形屏幕。 closegraph()的关闭图形功能。
settextstyle(0,0,6); for(i=1;i<=15;i++) {
setcolor(i); outtextxy(150,180,"hello!!!"); delay(1000000); } } cleardevice(); setbkcolor(WHITE); setfillstyle(SOLID_FILL,RED); bar(300,400,348,404); /*画屏幕上端的方块*/ randomize(); for(n=0;n<=150;n=n+15) for(m=0;m<=640;m=m+32) { color=((rand()%5)+2); setfillstyle(1,color);
void main() {
int i,j,m,n; for(i=0,n=0;i<10;i++) {
m=0; for(j=0;j<20;j++) {
a[i][j].m=m; a[i][j].n=n; a[i][j].key=0; m=m+32; } n=n+15; } initgr();
9
picture(); move(); end(); closegr(); }
case 0: setcolor(RED); settextstyle(0,0,4); outtextxy(180,220,"Game Over!!!"); sleep(2); break;
}
}
/*爆裂效果*/ void bomb(int m,int n) {
int r1,i; int pointM,pointN,point_color;
三、主要解决问题的方法及技术关键 1、主要问题及解决方法: 用 “ graphics.h” 库 存 函 数 实 现 图 形 的 初 试 化 绘 制 。 并 利 用 setcolour()( 显示当前要画线颜色)和循环语句实现图形的颜色随时 间周期变换。 利用 kbhit()(检查当前按下键)实现游戏的开始与否的控制,若不按
putpixel(pointM,pointN,point_color);
delay(1000000);
}
setfillstyle(1,BLUE);
bar(m,n,m+32,n+15);
}
/*开始游戏*/
void move()
{
int key;
int i,j,boxM,boxN;
int ballM,ballN,dM=1,dN=1;
/*判断是否击中方块*/ for(boxN=0,i=0;boxN<=150;boxN=boxN+15,i++) for(boxM=0,j=0;boxM<=640;boxM=boxM+32,j++) {
if((ballM<boxM+32)&&(ballM>boxM)&&((ballN<=(boxN+20))&&(ballN>=boxN-5)) &&(a[i][j].key==0))
if((ballN<=10)||(ballN>=470)) dN=dN*(-1);
setcolor(YELLOW); circle(ballM+=dM,ballN-=dN,5); setfillstyle(SOLID_FILL,YELLOW); floodfill(ballM,ballN,YELLOW); delay(6666); setcolor(BLUE); circle(ballM,ballN,5); setfillstyle(SOLID_FILL,BLUE); floodfill(ballM,ballN,BLUE);
case 1: setcolor(RED); settextstyle(0,0,4); outtextxy(130,200,"YOU ARE FALUIRE !!!"); sleep(1); cleardevice(); settextstyle(0,0,7); outtextxy(80,220,"Again!!!"); sleep(2); break;
相关主题