C语言打砖块游戏
- 格式:doc
- 大小:160.50 KB
- 文档页数:15
打砖块游戏设计报告(共五则)第一篇:打砖块游戏设计报告*************面向对象方法及程序设计课程设计报告打砖块游戏的设计与开发分组:第九组组员姓名:******************** 班级:*********** 指导教师: ****完成日期:2014年 06月21日面向对象方法及程序设计课程设计题目:打砖块游戏的开发与设计为了加强计算机科学与技术专业学生的学科实践能力,巩固和强化所学专业知识,提高学生的学习兴趣,本课程设计实践周特别强调理论与实践相结合,利用所学专业知识,进行实践项目的开发,提高学生的实践编程能力和技术文档的写作能力,提高学生的学习兴趣,为后期的学习奠定一定的实践基础。
目录第一章课程设计的目的与要求.............................................................................................3 1.1课程设计目的................................................................................................................3 1.2 课程设计的实验环境...................................................................................................3 1.3 课程设计的预备知识 (3)1.4课程设计要求 (3)1.4.1人员分配,形成课程设计小组............................................................................3 1.4.2 分析课程设计的题目要求.................................................................................3 1.4.3写出详细的设计说明............................................................................................3 第二章课程设计内容.............................................................................................................3 2.1设计思路 (3)2.2功能介绍 (4)2.3相关素材 (4)2.4程序整体设计说明........................................................................................................4 2.5程序部分源代码及注释................................................................................................4 2.6程序结构流程图 (6)2.7程序代码 (6)2.8运行程序 (17)第三章课程设计总结 (17)/ 19 面向对象方法及程序设计课程设计第一章课程设计的目的与要求1.1课程设计目的本次课程设计是计算机科学与技术专业最重要的实践环节之一。
C语言编写俄罗斯方块实验报告实验报告一、实验目的实践C语言的基本语法和操作,测试自己对C语言的熟练程度,实现俄罗斯方块游戏的基本功能。
二、实验步骤1.定义游戏界面:使用二维数组定义游戏界面,用字符来表示方块的状态(空白、正在下落的方块、已经固定的方块)。
2.实现方块的生成和选择:定义方块的类型,通过随机数生成下一个方块,用一个变量来保存下一个方块的类型,并在游戏界面上进行展示。
3.实现方块的下落和移动:方块可以通过用户的操作左右移动和旋转,同时也会自动下落,每当方块到达底部或者碰到已经固定的方块时,就会停止下落。
4.实现方块的旋转:将方块表示为二维数组,通过改变数组元素的位置实现方块的旋转。
5.实现方块的消除:当一行方块被填满时,该行会消除,并且上面的方块会下落填充空缺。
三、实验结果成功实现了俄罗斯方块的基本功能,可以进行游戏的开始、暂停、重新开始、结束等操作。
在游戏过程中,方块可以通过键盘的方向键左右移动,通过按下空格键进行快速下落,通过旋转方向键进行方块的旋转。
当方块都不能下落时,游戏结束,会提示游戏结束的信息,并显示最终得分。
四、实验总结通过本次实验,我进一步了解了C语言的基本语法和操作,也体验到了编程的乐趣。
通过这个实验,我对C语言有了更深入的理解,在实现俄罗斯方块的过程中锻炼了自己的逻辑思维能力和编程能力。
同时,我也学会了如何进行代码的调试和优化,使得程序的运行更加流畅和高效。
在后续的学习中,我将更加深入地学习C语言的高级特性,不断提升自己的编程水平。
通过不断的实践和练习,我相信我可以在C语言编程方面取得更进一步的进展,完成更加复杂和有挑战性的任务。
总体而言,本次实验收获颇多,不仅提高了我的编程能力,也为我的学习之路打下了良好的基础。
我相信在今后的学习和工作中,这些经验将会成为我不断进步的动力和宝贵的财富。
C语⾔实现反弹球消砖块游戏本⽂实例为⼤家分享了C语⾔实现反弹球消砖块游戏的具体代码,供⼤家参考,具体内容如下1.⽬标要求:1.击中上⽅⽅块’H’,分数加12.下⽅控制线没有接到⼩球时,游戏结束2.C语⾔代码:#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>/*《反弹球消砖块》 by:你最珍贵———————————|控制信号: | 左 | 右 |———————————| 键盘: | j | l |———————————1.击中上⽅⽅块'H',分数加12.下⽅控制线没有接到⼩球时,游戏结束*/void HideCursor(){ //隐藏光标位置 ,这个函数复制代码就⾏CONSOLE_CURSOR_INFO cursor_info={1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);}void gotoxy(int x,int y){ //把光标放在(0,0)位置 ,这个函数复制代码就⾏HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);}int IsEnd;//是否结束int interface_x,interface_y;//界⾯⾏数、列数int block_y;//砖块列位置int ctrlline_width,ctrlline_left,ctrlline_right;//控制线的左列数,宽度,右列数int ball_x,ball_y;//⼩球位置int ballv_x,ballv_y; //⼩球⾏列速度(1为正⽅向-1为反⽅向)int scores;//分数int ballv_num;//⼩球速度的慢速变量,数值越⼤越慢int ballv_num_i;//⼩球慢速变量值的循环变量void startup(){ //【数据初始化】HideCursor();//不显⽰光标IsEnd = 0;interface_x = 22;interface_y = 30;block_y = rand()%(interface_y-6)+2;ctrlline_width=8;ctrlline_left=(interface_y-ctrlline_width-2)/2+1+1;//控制线最左列位置ctrlline_right=ctrlline_left+ctrlline_width-1;ball_x=interface_x-1;ball_y=ctrlline_left+ctrlline_width/2;ballv_x=1;ballv_y=1;scores=0;ballv_num=3;ballv_num_i=1;}void show_begin(){//【初始页⾯展⽰】int i,j;int start=0;char input;while(!start){gotoxy(0,0);//每次输出页⾯把⿏标放回(0,0)for(i=1;i<=interface_x/2-4;i++) printf("\n");for(i=1;i<interface_y/2-8;i++) printf(" ");printf("《反弹球消砖块》\n\n");for(i=1;i<interface_y/2-9;i++) printf(" ");printf("请按任意键开始游戏\n\n");for(i=1;i<=interface_x/2-6;i++) printf("\n");if(kbhit()){input = getch();if(input) start=1;}}}void show(){ //【显⽰画⾯】gotoxy(0,0);//每次输出页⾯把⿏标放回(0,0)int i,j;for(i=1;i<=interface_y/2-8;i++) printf(" ");printf("《反弹球消砖块》") ;for(i=1;i<=interface_y/2-8-8;i++) printf(" ");printf("分数:%3d\n",scores);for(i=1;i<=interface_x;i++){printf(" ");//使屏幕对称加的空格for(j=1;j<=interface_y;j++){if(j==1||j==interface_y){ //边框printf("|");}else if(i==interface_x){ //边框printf("_");}else if(i==1){ //上边界printf("V");}else if(i==interface_x-1&&(j>=ctrlline_left&&j<=ctrlline_right)){ //控制线printf("*");}else if(i==2&&(j>=block_y&&j<=block_y+4)){ //砖块printf("H");}else if(i==ball_x&&j==ball_y){ //反弹球printf("O");}else printf(" "); //什么也不是的位置输出空格}printf("\n");}}void update_outinput(){ //【与输⼊⽆关的更新】ballv_num_i= (ballv_num_i==ballv_num)?1:ballv_num_i+1;//ballv_num_i⼀次从{1到ballv_num}循环,当ballv_num_i为最⼤时才更新球的位置,此⽬的是减速 if(ballv_num_i==ballv_num){if(ball_y==2||ball_y==interface_y-1){//判断是否到左右边界ballv_y *= -1;}if(ball_x==2){//判断是否到上边界if(ball_y>=block_y&&ball_y<=block_y+4){//判断在上边界有⽆消去砖块block_y = rand()%(interface_y-6)+2;//消去则砖块位置重置scores++;//分数加1printf("\a");//提⽰⾳}ballv_x *= -1;//不论是否碰砖块,都要反弹}if(ball_x==interface_x-1){//判断是否下边界接住⼩球了,若接住反弹,否则结束游戏if(ball_y>=ctrlline_left && ball_y<=ctrlline_right){ballv_x *= -1;}else{IsEnd = 1;}}ball_x += ballv_x;ball_y += ballv_y;}}void update_input(){//【与输⼊有关的更新】char input;if(kbhit()){input = getch();if( input == 'j'){//输⼊“j”下⽅控制线左移ctrlline_left= (ctrlline_left==2)?2:ctrlline_left-1;ctrlline_right= ctrlline_left+ctrlline_width-1;}else if( input == 'l'){//输⼊“l”下⽅控制线右移ctrlline_left= (ctrlline_left==interface_y-ctrlline_width)?\interface_y-ctrlline_width:ctrlline_left+1;ctrlline_right= ctrlline_left+ctrlline_width-1;}}}void show_end(){//【显⽰失败界⾯】system("cls");printf("\n\n\n\n\n\ngame over!\n\n\n\n\n\n\n\n\n\n\n\n\n");system("pause");//暂停system("pause");//暂停}int main(){startup(); //数据初始化show_begin();//初始页⾯while(!IsEnd){ //游戏循环执⾏show(); // 显⽰画⾯update_outinput(); //与输⼊⽆关的更新update_input(); //与输⼊有关的更新}show_end(); //显⽰失败界⾯return 0;}3.运⾏结果:⼩游戏玩法:《反弹球消砖块》by:你最珍贵————————————————————|控制信号: | 左 | 右 |————————————————————| 键盘: | j | l |————————————————————以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
2016-2017学年第一学期《Windows程序设计》课程设计报告题目:打砖块游戏设计专业:班级:姓名:指导教师:成绩:二0一六年十一月十五日目录1.设计目的与要求 (3)1.1设计目的 (3)1.2设计要求 (3)2.设计内容 (3)2.1内容简介 (3)2.2设计说明 (3)3.实现过程 (4)3.1主界面 (4)3.2 游戏界面 (5)3.3帮助界面 (6)3.4开始/结束游戏 (6)3.5游戏过关提示 (9)3.6异常处理说明 (9)4.设计心得 (10)5.参考文献 (11)6.附录 (12)1.设计目的与要求1.1设计目的通过打砖块游戏设计,加深我对理论教学内容的理解和掌握Visual Studio 中Windows窗体的建立及窗体中各个控件的使用,以及界面的设计。
同时熟悉C#语言的编程,提高分析和解决实际问题的能力,了解基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2设计要求界面要求:要求界面简洁美观,简单易用。
设计要求:按程序设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握c#.net2003的基本技能和面向对象的概念和方法;了解windows编程。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
2.设计内容2.1内容简介打砖块游戏:作为我们一款熟知的游戏我想大家都不陌生吧,就是通过挡板把小球挡回,不让小球落地,直到打光所有砖块为止,游戏过关进入更难得模式小球速度更快,砖块组成的图案发生改变,是一个很有趣味的小游戏。
2.2设计说明2.2.1需求分析本系统为一个用C#实现的为我们所熟悉的简单的打砖块游戏,该系统的具体功能如下:(1) 能简便的开始游戏,游戏中的功能与日常我们所熟悉的游戏的功能一致 ,直到砖块全部打光过关和在砖块打光之前机会用完游戏结束功能;(2) 当游戏结束时会自动弹出消息框提示本关所获得得分数;(3) 当过关时会出现提示图片,点击进入下一关,下一关的方块位置和所组成的形状会发生改变。
C#课程设计(打砖块)辽宁工业大学C#.NET程序设计课程设计(报告)题目:打砖块游戏院(系):软件学院专业班级:计算机信息管理101班学号: 101403009学生姓名:姜洪亮指导教师:胡峰教师职称:助教起止时间:2011.11.21至2011.12.02程序设计专题(报告)任务及评语目录第1章程序设计专题目的与要求 (1)1.1 程序设计目的 (1)1.2 程序设计的实验环境 (1)1.3 程序设计的预备知识 (1)1.4 程序设计要求 (1)第2章程序设计内容 (2)2.1概要设计 (2)2.2程序整体设计说明 (2)2.3程序部分源代码及注释 (8)2.4测试结果 (12)第3章程序设计总结 (13)参考文献 (14)第1章程序设计目的与要求1.1 程序设计目的《C#.Net程序设计》是计算机科学与技术专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是软件技术专业学生学习完《C#.Net程序设计》课程后,进行的一次全面的综合训练,C#.Net 程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2 程序设计的实验环境硬件要求能运行Windows xp操作系统的微机系统。
C#.Net程序设计语言及相应的集成开发环境visual 。
1.3 程序设计的预备知识熟悉c#语言及visual 集成开发环境。
1.4 程序设计要求按程序设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握c#.net2003的基本技能和面向对象的概念和方法;了解windows编程。
目录第1章程序设计专题目的与要求 (1)1.1 程序设计目的 (1)1.2 程序设计的实验环境 (1)1.3 程序设计的预备知识 (1)1.4 程序设计要求 (1)第2章程序设计内容 (2)2.1概要设计 (2)2.2程序整体设计说明 (2)2.3程序部分源代码及注释 (8)2.4测试结果 (12)第3章程序设计总结 (13)参考文献 (14)第1章程序设计目的与要求1.1 程序设计目的《C#.Net程序设计》是计算机科学与技术专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是软件技术专业学生学习完《C#.Net程序设计》课程后,进行的一次全面的综合训练,C#.Net 程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2 程序设计的实验环境硬件要求能运行Windows xp操作系统的微机系统。
C#.Net程序设计语言及相应的集成开发环境visual 。
1.3 程序设计的预备知识熟悉c#语言及visual 集成开发环境。
1.4 程序设计要求按程序设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握c#.net2003的基本技能和面向对象的概念和方法;了解windows编程。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
第2章程序设计内容2.1程序设计题目打砖块游戏:作为我们一款熟知的游戏我想大家都不陌生吧,就是通过挡板把小球挡回,不让小球落地,直到打光所有砖块为止,游戏过关进入更难得模式小球速度更快,砖块组成的图案发生改变,是一个很有趣味的小游戏。
课程设计报告课程名称:面向对象程序设计C++设计题目:俄罗斯方块游戏专业:计算机科学与技术姓名:学号:指导教师:李晓虹2015 年 12 月 25 日目录一、需求分析 (3)1.1系统概述 (3)1.2游戏特色 (3)1.3功能需求 (3)二、总体设计 (4)2.1系统模块 (4)2.2系统业务处理流程 (5)三、详细设计 (5)3.1砖块预显示 (5)3.2分数统计 (6)3.3砖块移动和游戏暂停的实现 (7)3.4播放背景音乐 (8)3.5游戏设置与帮助 (8)3.6背景位图的插入 (9)3.7砖块三维化 (9)3.8俄罗斯方块双人版的实现 (10)四、测试与结果 (11)4.1整个游戏运行界面图 (11)4.2游戏设置与帮助页面图 (11)五、总结 (12)一、需求分析1.1系统概述《俄罗斯方块》玩家通过键盘控制方块的形状样式和速度,组成相连的1行或1行以上方块会自动消除,方块消除到一定数量后会得到一定的分数,玩家可以升级,从而难度加大,也就是速度加快,玩家还可以通过消除一组方块,使得到的分数翻倍等到更多的分数,造成更强的分数效果。
游戏中玩家可以和其他玩家1V1对战。
1.2游戏特色《俄罗斯方块》是基于pc休闲平台上的单机对战休闲游戏,这就要求游戏本身不能过于庞大复杂,需要考虑到单机对战的灵活性和多变性。
在游戏中通过对方块速度的变,能够使玩家不仅仅通过自己消除方块来获胜,还可以等到更多的分数,因此获得胜利。
《俄罗斯方块》游戏在传统的俄罗斯方块当中加入了新鲜的游戏元素,例如可爱的方块的颜色,绚目的消除方块特效显示,在游戏本身的简单耐玩的基础上,大大丰富了游戏的观赏性和趣味性,令玩家有了完全的游戏体验,充分享受游戏带来的乐趣。
1.3功能需求(1)实现双人俄罗斯方块(2)隐藏菜单栏、工具栏、状态栏(3)实现难度可以选择(4)实现下一个砖块预测功能(5)实现总分统计功能,和每步消除所得分数显示(6)实现下、左、右、旋转、暂停功能(7)实现背景音乐播放功能(8)添加游戏帮助菜单(9)实现砖块三维化(10)实现双缓冲避免屏幕闪烁(11)设置窗口大小,禁用最大化按钮,禁止鼠标拖动改变窗口大小二、总体设计2.1系统模块图2-12.2系统业务处理流程图2-2三、详细设计3.1砖块预显示砖块预显示的原理就是在第一次生成砖块的时候,一次生成2个砖块。
#include<graphics.h>#include<stdio.h>#include<conio.h>#include<math.h>#include<time.h>//#include <string.h>//#include <afx.h>#define row 5#define colunm 20#define CMD_UP 1#define CMD_DOWN 2#define CMD_LEFT 4#define CMD_RIGHT 8int a[row][colunm]={0};int ballx,bally;//小球的坐标int boardx,boardy;//木板的坐标bool starting=false;//判断是否小球正在运动int addx=1;int addy=-1;//小球坐标加的量bool iscatch=false;//判断是否木板捕捉到小球void DispatchCommand(int _cmd){setfillcolor(BLACK);solidrectangle(boardx,boardy,boardx+60,boardy+10);if (_cmd & CMD_LEFT){if(iscatch){srand(time(NULL));addx=rand()%2+10;setfillcolor(BLACK);solidcircle(ballx,bally,10);ballx-=10;setfillcolor(LIGHTBLUE);//solidcircle(ballx,bally,10);printf("减\n");}boardx-=1;}if (_cmd & CMD_RIGHT){if(iscatch){srand(time(NULL));addx=rand()%2+10;setfillcolor(BLACK);solidcircle(ballx,bally,10);ballx+=10;setfillcolor(LIGHTBLUE);solidcircle(ballx,bally,10);printf("加\n");}boardx+=1;}if(boardx<=10)boardx=10;if(boardx>=380)boardx=380;setfillcolor(LIGHTMAGENTA);//LIGHTRED//CYAN solidrectangle(boardx,boardy,boardx+60,boardy+10); }//键盘控制int GetCommand(){int c = 0;if (GetAsyncKeyState('A') & 0x8000) c |= CMD_LEFT; if (GetAsyncKeyState('D') & 0x8000) c |= CMD_RIGHT; if (GetAsyncKeyState('W') & 0x8000) c |= CMD_UP;if (GetAsyncKeyState('S') & 0x8000) c |= CMD_DOWN; return c;}//画砖块void drawrectangle(){setfillcolor(LIGHTCYAN);//YELLOW//MAGENTAfor(int j=0;j<row;j++){for(int i=0;i<colunm;i++){if(a[j][i]==0)solidrectangle(i*22,j*12,i*22+20,j*12+10);//左上右下}}}void init(){boardx=220-30;boardy=600-10;//小球中心坐标ballx=220;bally=580;drawrectangle();setfillcolor(LIGHTMAGENTA);//LIGHTRED//CYANsolidrectangle(boardx,boardy,boardx+60,boardy+10);//初始化木板setfillcolor(LIGHTBLUE);solidcircle(ballx,bally,10);//初始化小球}void drawball(){iscatch=false;setfillcolor(BLACK);//用于擦出上一次的小球solidcircle(ballx,bally,10);BeginBatchDraw();if(ballx>=430){addx=-1;}if(ballx<=0){addx=1;}if(bally<=10)addy=-1*addy;for(int i=0;i<5;i++){int flag0=0;for(int j=0;j<20;j++){//砖块坐标(宽高)int currentx=j*22;//左int currenty=i*12;//上if(a[i][j]==0 && ballx<=currentx+30 && ballx>=currentx-10 && bally-currenty<=20 &&bally>=currenty)//判断小球碰到哪个砖块{printf("a\n");addy=-1*addy;addx=-1*addx;a[i][j]=1;flag0=1;//消除原来的砖块setfillcolor(BLACK);solidrectangle(currentx,currenty,currentx+20,currenty+10);break;}}if(flag0)break;}if(starting && ballx<=boardx+70 && ballx>=boardx-10 && boardy-bally<=10 &&boardy-bally>=5)//判断木板是否接到小球{printf("接住");iscatch=true;addy=-1*addy;}starting=true;ballx+=addx;//更新小球坐标bally+=addy;setfillcolor(LIGHTBLUE);solidcircle(ballx,bally,10);FlushBatchDraw();Sleep(5);}void play(){char c;while(1){drawrectangle(); //画砖块//if(kbhit())//{c=GetCommand();//键盘控制DispatchCommand(c);//移动控制//}drawball();//画球if(bally>590){//setcolor(RED);//outtextxy(200,300,LPCTSTR("GAME OVER"));//NULLMessageBox(GetHWnd(),TEXT(" GAME OVER "),TEXT("提示"),MB_OK);break;}/*cleardevice();Sleep(5000);*/}}void main(){initgraph(440,600,0);//SHOWCONSOLE不显示控制台init();setcolor(WHITE);const char* sh="请按空格键开始游戏";//LPCTSTR *p = (LPCTSTR *)sh;outtextxy(140,300,LPCTSTR(sh));getch();if (GetAsyncKeyState(VK_SPACE)){cleardevice();play();//Sleep(5000);}//Sleep(5000);//cleardevice();//Sleep(5000);//setcolor(RED);//outtextxy(200,300,LPCTSTR(""));//MessageBox(NULL,TEXT(" GAME OVER "),TEXT("提示"),MB_OK);//setcolor(RED);//const char* ch="GAME OVER";//outtextxy(180,300,LPCTSTR(ch)); //Sleep(3000);//Sleep(5000);getch();}。
#include<graphics.h>#include<conio.h>#include<windows.h>#include<stdlib.h>#include<stdio.h>void draw(int x1){int m=0,n=0,x=40,y=20;int t=0,i,j,k=1;int a=0,b=127,c=88;for(i=0;i<8;i++){n=i*20;y=n+20;for(j=0;j<16-t;j++){m=(j+i)*40;x=m+40;POINT points[]={{m,n}, {x,n}, {x,y}, {m,y}}; setfillcolor(RGB(a,b,c));fillpolygon(points, 4);a=8*k+8;b=j*3+k+200;c=20*k;k=k+8;}t=t+2;k=1;}m=300;n=160;x=340;y=180;POINT points[]={{m,n}, {x,n}, {x,y}, {m,y}}; setfillcolor(RGB(a,b,c));fillpolygon(points, 4);}void end(){settextstyle(50, 0, "宋体", 0, 0, FW_BOLD, false, false, false);settextcolor(RED);outtextxy(200,200,"游戏结束!");getch();closegraph();}void start(){int n=0;loadimage(NULL,"IMSGE","background"); while(1){setbkmode(TRANSPARENT);settextstyle(50, 0, "楷体", 0, 0, FW_BOLD, false, false, false);if(n%2==0)settextcolor(GREEN);elsesettextcolor(RED);outtextxy(80,100,"请按空格键开始游戏"); Sleep(250);if(_kbhit())break;n++;}}void main(){int x=320,y=430,m=270,n=370; int a,b,c,e=0,f=0,g=0,k[3];int i,j;char d;initgraph(640,480);start();setbkcolor(WHITE); cleardevice();setlinecolor(WHITE);draw(1);while(1){setlinecolor(LIGHTBLUE); setlinestyle(PS_SOLID, 10); line(m,445,n,445); setlinestyle(PS_SOLID, 0); setlinecolor(WHITE); setfillcolor(BROWN); fillcircle(x,y,10);Sleep(60);setfillcolor(WHITE); fillcircle(x,y,10);if(_kbhit()){d=getch();setlinecolor(WHITE); setlinestyle(PS_SOLID, 10); line(m,445,n,445);if(n<640&&d=='d'){m=m+27;n=n+27;}else if(m>0&&d=='a'){m=m-27;n=n-27;}}//确定x,y的值// if(y>=435)end();if(y==430&&x>=m-5&&x<=n+5) {if(x>m&&x<=m+25){a=0;b=2;c=2;if(10/(x-m)==0)k[0]=2;else if(10/(x-m)>3)k[0]=3;elsek[0]=10/(x-m);}else if(x>m+25&&x<=m+55) {a=2;b=0;c=2;if(15/(x-m-25)==0)k[1]=2;else if(15/(x-m-25)>3)k[1]=3;elsek[1]=10/(x-m-25);}else if(x>m+55&&x<=n) {a=2;b=2;c=0;if(10/(x-m-55)==0)k[2]=2;else if(10/(x-m-55)>3)k[2]=3;elsek[2]=10/(x-m-55);}}if(1){if(e==0){y=y-10;if(y<=10){g=1-g;e=1;}if(getpixel(x-1,y-10)!=WHITE||getpixel(x-1,y+10)! =WHITE||getpixel(x+1,y-10)!=WHITE||getpixel(x +1,y+10)!=WHITE){e=1;setfillcolor(WHITE);for(i=8;i<=18;i++){for(j=8;j<=18;j++){floodfill(x-i,y-j,WHITE);floodfill(x+i,y-j,WHITE);floodfill(x-i,y+j,WHITE);floodfill(x+i,y+j,WHITE);}}}else if(e==1){y=y+10;if(getpixel(x-1,y-14)!=WHITE||getpixel(x-1,y+14)! =WHITE||getpixel(x+1,y-14)!=WHITE||getpixel(x +1,y+14)!=WHITE){e=0;setfillcolor(WHITE);for(i=8;i<=18;i++){for(j=8;j<=18;j++){floodfill(x-i,y-j,WHITE);floodfill(x+i,y-j,WHITE);floodfill(x-i,y+j,WHITE);floodfill(x+i,y+j,WHITE);}}else if(y==430&&x>=m-5&&x<=n+5)e=0;}if(g==0&&a==0){x=x-k[0]*5;if(y<=10)g=1-g;else if(x<=10||x>=630)g=1;if(getpixel(x-1,y-10)!=WHITE||getpixel(x-1,y+10)! =WHITE||getpixel(x+1,y-10)!=WHITE||getpixel(x +1,y+10)!=WHITE){g=1;setfillcolor(WHITE);for(i=8;i<=18;i++){for(j=8;j<=18;j++){floodfill(x-i,y-j,WHITE);floodfill(x+i,y-j,WHITE);floodfill(x-i,y+j,WHITE);floodfill(x+i,y+j,WHITE);}}}}else if(g==1&&a==0){x=x+k[0]*5;if(y<=10)g=1-g;else if(x<=10||x>=630)g=0;elseif(getpixel(x-1,y-10)!=WHITE||getpixel(x-1,y+10)! =WHITE||getpixel(x+1,y-10)!=WHITE||getpixel(x +1,y+10)!=WHITE){g=0;setfillcolor(WHITE);for(i=10;i<=18;i++){for(j=10;j<=18;j++){floodfill(x-i,y-j,WHITE);floodfill(x+i,y-j,WHITE);floodfill(x-i,y+j,WHITE);floodfill(x+i,y+j,WHITE);}}}}if(g==0&&b==0){x=x-k[1]*2;if(y<=10)g=1-g;else if(x<=10||x>=630)g=1;elseif(getpixel(x-1,y-10)!=WHITE||getpixel(x-1,y+10)! =WHITE||getpixel(x+1,y-10)!=WHITE||getpixel(x +1,y+10)!=WHITE){g=1;setfillcolor(WHITE);for(i=8;i<=18;i++){for(j=8;j<=18;j++){floodfill(x-i,y-j,WHITE);floodfill(x+i,y-j,WHITE);floodfill(x-i,y+j,WHITE);floodfill(x+i,y+j,WHITE);}}}}else if(g==1&&b==0){x=x+k[1]*2;if(y<=10)g=1-g;else if(x<=10||x>=630)g=0;elseif(getpixel(x-1,y-10)!=WHITE||getpixel(x-1,y+10)!=WHITE||getpixel(x+1,y-10)!=WHITE||getpixel(x +1,y+10)!=WHITE){g=0;setfillcolor(WHITE);for(i=8;i<=18;i++){for(j=8;j<=18;j++){floodfill(x-i,y-j,WHITE);floodfill(x+i,y-j,WHITE);floodfill(x-i,y+j,WHITE);floodfill(x+i,y+j,WHITE);}}}}if(g==0&&c==0){x=x-k[2]*5;if(y<=10)g=1-g;else if(x<=10||x>=630)g=1;elseif(getpixel(x-1,y-10)!=WHITE||getpixel(x-1,y+10)! =WHITE||getpixel(x+1,y-10)!=WHITE||getpixel(x +1,y+10)!=WHITE){g=1;setfillcolor(WHITE);for(i=8;i<=18;i++){for(j=8;j<=18;j++){floodfill(x-i,y-j,WHITE);floodfill(x+i,y-j,WHITE);floodfill(x-i,y+j,WHITE);floodfill(x+i,y+j,WHITE);}}}}else if(g==1&&c==0)x=x+k[2]*5;if(x<=10||x>=630)g=0;else if(y<=10)g=1-g;elseif(getpixel(x-1,y-10)!=WHITE||getpixel(x-1,y+10)! =WHITE||getpixel(x+1,y-10)!=WHITE||getpixel(x +1,y+10)!=WHITE){g=0;setfillcolor(WHITE);for(i=8;i<=18;i++){for(j=8;j<=18;j++){floodfill(x-i,y-j,WHITE);floodfill(x+i,y-j,WHITE);floodfill(x-i,y+j,WHITE);floodfill(x+i,y+j,WHITE);}}}}} end(); }。
C语言打砖块游戏 一、游戏截图
二、游戏源码 #include #include #include #include
/* DEFINES ********************************************************************************/ // defines for windows #define WINDOW_CLASS_NAME TEXT("WIN32CLASS") #define WINDOW_WIDTH 640 #define WINDOW_HEIGHT 480
// states for game loop #define GAME_STATE_INIT 0 #define GAME_STATE_START_LEVEL 1 #define GAME_STATE_RUN 2 #define GAME_STATE_SHUTDOWN 3 #define GAME_STATE_EXIT 4 // block defines #define NUM_BLOCK_ROWS 6 #define NUM_BLOCK_COLUMNS 8
#define BLOCK_WIDTH 64 #define BLOCK_HEIGHT 16 #define BLOCK_ORIGIN_X 8 #define BLOCK_ORIGIN_Y 8 #define BLOCK_X_GAP 80 #define BLOCK_Y_GAP 32
// paddle defines #define PADDLE_START_X (WINDOW_WIDTH/2 - 16) #define PADDLE_START_Y (WINDOW_HEIGHT - 32); #define PADDLE_WIDTH 32 #define PADDLE_HEIGHT 8 #define PADDLE_COLOR RGB(0, 0, 255)
// ball defines #define BALL_START_Y (WINDOW_HEIGHT/2) #define BALL_SIZE 4
// color defines #define BACKGROUND_COLOR RGB(0, 0, 0) #define BLOCK_COLOR RGB(125, 0, 0) #define BALL_COLOR RGB(222, 0, 222)
// these read the keyboard asynchronously #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
/* basic unsigned types *******************************************************************/ typedef unsigned short USHORT; typedef unsigned short WORD; typedef unsigned char UCHAR; typedef unsigned char BYTE;
/* FUNCTION DECLARATION *******************************************************************/ int Game_Init(void *parms = NULL); int Game_Shutdown(void *parms = NULL); int Game_Main(void *parms = NULL);
DWORD Start_Clock(void); DWORD Wait_Clock(DWORD count);
/* GLOBALS *********************************************************************************/ HWND main_window_handle = NULL; // save the window handle HINSTANCE main_instance = NULL; // save the instance int game_state = GAME_STATE_INIT; // starting state
int paddle_x = 0, paddle_y = 0; // tracks position of paddle int ball_x = 0, ball_y = 0; // tracks position of ball int ball_dx = 0, ball_dy = 0; // velocity of ball int score = 0; // the score int level = 1; // the current level int blocks_hit = 0; // tracks number of blocks hit
DWORD start_clock_count = 0; // used for timing // this contains the game grid data UCHAR blocks[NUM_BLOCK_ROWS][NUM_BLOCK_COLUMNS];
/* WINDPROC ********************************************************************************/ LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { // this is the main message handler of the system PAINTSTRUCT ps; HDC hdc;
switch (msg) { case WM_CREATE: return 0;
case WM_PAINT: hdc = BeginPaint(hwnd, &ps); EndPaint(hwnd, &ps); return 0;
case WM_DESTROY: PostQuitMessage(0); return 0;
default: break; }
return DefWindowProc(hwnd, msg, wparam, lparam); }
/* WINMAIN ********************************************************************************/ int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { WNDCLASS winclass; HWND hwnd; MSG msg; HDC hdc; PAINTSTRUCT ps;
/* CS_DBLCLKS Specifies that the window should be notified of double clicks with * WM_xBUTTONDBLCLK messages * CS_OWNDC标志,属于此窗口类的窗口实例都有自己的DC(称为私有DC),私有DC仅属于该窗口实例, * 所以程序只需要调用一次GetDC或BeginPaint获取DC,系统就为窗口初始化一个DC,并且保存程序 * 对其进行的改变。ReleaseDC和EndPaint函数不再需要了,因为其他程序无法访问和改变私有DC。 */ winclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinstance; winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = WINDOW_CLASS_NAME;
// register the window class if (!RegisterClass(&winclass)) return 0;
// Create the window, note the use of WS_POPUP hwnd = CreateWindow( WINDOW_CLASS_NAME, // class TEXT("WIN32 Game Console"), // title WS_POPUP, // style 200, // initial x 100, // initial y WINDOW_WIDTH, // initial width WINDOW_HEIGHT, // initial height NULL, // handle to parent NULL, // handle to menu hinstance, // instance NULL); // creation parms
if (! hwnd) return 0;
ShowWindow(hwnd, ncmdshow); UpdateWindow(hwnd);
// hide mouse //ShowCursor(FALSE);
// save the window handle and instance in a global main_window_handle = hwnd; main_instance = hinstance;