程序设计基础课程设计
俄罗斯方块游戏
院
班
组
组
系:计算机科学技术学院
级:师 计 09-2 班
长:高 正 阳
员:陈东、班海燕、李晓惠
指导教师:黄 绍 义
2009 年 12 月 23 日
*一、实践的目的和要求
加深对《C 语言》课程所学知识的理解,进一步巩固 C 语言语
法规则。学会编制结构清晰、风格良好、数据结构适当的C语言程序,
从而具备解决综合性实际问题的能力。
*二、实践内容
在熟练掌握 C 语言的基本知识:数据类型(整形、实型、字符
型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增
自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循
环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握
各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。
*三、 实践任务
1.欢迎画面
2. 附加声音界面
3.俄罗斯方块课程设计系统(自己设计界面)
*四、设计流程
编程
/*键盘码*/
/* 时钟中断的中断号 */
/*x,y 是用作记录每个方块的最左上角的编号*/
*五、相关程序
#include
#include
#include
#include
#include
#include
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define
TIMER
0x1c
struct Snow
{
int x;
int y;
int speed;
}snow[100];
typedef struct
{
int box[4][4];
int color;
int next;
}SHAPE;
int x=0,y=4,form[16][12]={
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
};
SHAPE shapes[19]={
/*俄罗斯方块初始化界面*/
{1,0,0,0,
1,0,0,0,
1,1,0,0,
0,0,0,0,CYAN,1},
{1,1,1,0,
1,0,0,0,
0,0,0,0,
0,0,0,0,CYAN,2},
{1,1,0,0,
0,1,0,0,
0,1,0,0,
0,0,0,0,CYAN,3},
{0,0,0,0,
0,0,1,0,
1,1,1,0,
0,0,0,0,CYAN,0},
{0,1,0,0,
0,1,0,0,
1,1,0,0,
0,0,0,0,MAGENTA,5},
{1,0,0,0,
1,1,1,0,
0,0,0,0,
0,0,0,0,MAGENTA,6},
{1,1,0,0,
1,0,0,0,
1,0,0,0,
0,0,0,0,MAGENTA,7},
{1,1,1,0,
0,0,1,0,
0,0,0,0,
0,0,0,0,MAGENTA,4},
{1,0,0,0,
1,1,0,0,
0,1,0,0,
0,0,0,0,YELLOW,9},
{0,1,1,0,
1,1,0,0,
0,0,0,0,
0,0,0,0,YELLOW,8},
{0,1,0,0,
1,1,0,0,
1,0,0,0,
0,0,0,0,BROWN,11},
{1,1,0,0,
0,1,1,0,
0,0,0,0,
0,0,0,0,BROWN,10},
{0,1,0,0,
1,1,1,0,
0,0,0,0,
0,0,0,0,WHITE,13},
{1,0,0,0,
1,1,0,0,
1,0,0,0,
0,0,0,0,WHITE,14},
{1,1,1,0,
0,1,0,0,
0,0,0,0,
0,0,0,0,WHITE,15},
{0,1,0,0,
1,1,0,0,
0,1,0,0,
0,0,0,0,WHITE,12},
{1,0,0,0,
1,0,0,0,
1,0,0,0,
1,0,0,0,RED,17},
{1,1,1,1,
0,0,0,0,
0,0,0,0,
0,0,0,0,RED,16},
{1,1,0,0,
1,1,0,0,
0,0,0,0,
0,0,0,0,BLUE,18}
};
int TimerCounter=0;
int snownum=0;
int size;
int change1=10;
int annal[4][2],score=0,level=0,color,Boxnumber;
void plot();
void operation();
void *save1,*save2;
void Copy();
void DrawSnow();
void Pr();
void
void
{
interrupt
interrupt
*oldhandler)();
(
newhandler( )
TimerCounter++;
TimerCounter==36;
oldhandler();
}
void
{
SetTimer(void
interrupt
(*IntProc)())
oldhandler=getvect(TIMER);
disable();
setvect(TIMER,IntProc);
enable();
/* 开启中断 */
/* 设置新的时钟中断处理过程时,禁止所有中断 */
}
void
{
KillTimer()
disable();
setvect(TIMER,oldhandler);
enable();
}
void main()
{
/* 修改时钟中断 */
int gdriver=DETECT,gmode;
SetTimer(newhandler);
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"c:\\turboc2");
Copy();
DrawSnow();
closegraph();
initgraph(&gdriver,&gmode,"E:\\TC20H\\INCLUDE\\GRAPHICS.H");
plot();
operation();
getch();
/*初始化图形*/
}
{
void Copy()
setcolor(0);
setfillstyle(SOLID_FILL,15);
fillellipse(200,200,4,4);
size=imagesize(196,196,204,204);
save1=malloc(size);
save2=malloc(size);
getimage(196,196,204,204,save1);
getimage(96,96,104,104,save2);
}
void Pr()
{
int fr[]={392,392,440,294,262,262,220,294,392,392,
440,532,440,392,262,262,220,294,392,294,
262,247,220,196,392,294,330,294,262,262,
220,294,330,294,262,294,22,247,220,196};
setcolor(change1/10);
settextstyle(0,0,3);
outtextxy(100,200,"Welcome to our Game!!!”);
sound(fr[change1/10]);
}
void DrawSnow()
{
int i;
int sx[62];
randomize();
for(i=0;i<62;i++)
sx[i]=(i+2)*10;
cleardevice();
while(!kbhit())
{
Pr();
if (snownum!=100)
{
snow[snownum].speed=2+random(5);
i=random(62);
snow[snownum].x=sx[i];
snow[snownum].y=10-random(100);
}
for(i=0;i