JAVA课程设计打砖块

合集下载

打砖块游戏设计报告(共五则)

打砖块游戏设计报告(共五则)

打砖块游戏设计报告(共五则)第一篇:打砖块游戏设计报告*************面向对象方法及程序设计课程设计报告打砖块游戏的设计与开发分组:第九组组员姓名:******************** 班级:*********** 指导教师: ****完成日期: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课程设计目的本次课程设计是计算机科学与技术专业最重要的实践环节之一。

JAVA课程设计打砖块

JAVA课程设计打砖块

Java程序课程设计任务书一、主要内容打砖块游戏是一种动作电子游戏的名称。

玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。

球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。

二、具体要求通过图形用户界面(Graphics User Interface,GUI)和线程,使用户和程序之间可以方便地进行交互。

运用Swing组件,编写小应用程序游戏,加深对Java 语言的理解,深入地了解图形用户界面的设计,更加熟练地运用编程软件。

功能要求:(1)游戏运行需键盘的操作;(2)游戏可统计分数;(3)球落到底下会失去一颗,按ENTER可重新开始。

开发工具:JCreater软件;开发技术: J2ME。

三、进度安排12月28日:课程设计选题,查找参考资料12月29日:完成打砖块游戏程序设计分析12月30日 ~ 1月3日:完成程序代码的编写1月4日 ~ 1月5日:游戏测试与完善1月6日 ~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] (美)埃克尔著陈昊鹏,饶若楠等译. Java编程思想[J]. 机械工业出版社,2005[2](美)Gary 著张珑刘雅文译. Java编程原理[J]. 清华大学出版社,2004[3](美)Michael Morrison著徐刚,于健,薛雷译. 游戏编程入门[J]. 人民邮电出版社,[4](美)Wendy Stahler著冯宝坤,曹英译. 游戏编程中的数理应用[J]. 红旗出版社,2005[5](美)克罗夫特(David Wallace Croft)著彭晖译. Java游戏高级编程[J].清华大学出版社,2005[6](美)David Brackeen著邱仲潘译. Java游戏编程[J]. 科学出版社,2004[7] 聂庆亮编著. Java应用开发指南[J]. 清华大学出版社,2010[8] 耿祥义,张跃平编著. Java面向对象程序设计[J]. 清华大学出版社,2010[9] 杨绍方编著. Java编程实用技术与案例[J]. 清华大学出版社,[10] 明日科技编著. Java编程全能词典[J]. 电子工业出版社,2010摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。

打砖块代码课程设计

打砖块代码课程设计

打砖块代码课程设计一、课程目标知识目标:1. 让学生掌握编程语言的基本语法和结构,理解打砖块游戏的逻辑和规则。

2. 学习运用循环、条件语句和函数等编程概念,实现打砖块游戏的基本功能。

3. 了解游戏开发中的坐标系和碰撞检测原理。

技能目标:1. 培养学生独立编写代码、调试程序和解决问题的能力。

2. 提高学生在团队协作中沟通、分享和共同解决问题的能力。

3. 培养学生的创新思维和审美意识,能够设计美观、有趣的游戏界面。

情感态度价值观目标:1. 激发学生对编程和计算机科学的兴趣,树立学习自信心。

2. 培养学生面对困难和挑战时,保持积极、主动、坚持的态度。

3. 培养学生的团队精神和责任感,学会尊重和欣赏他人的成果。

课程性质:本课程为实践性强的编程课程,结合具体案例,让学生在动手实践中掌握编程知识和技能。

学生特点:学生处于好奇心强、求知欲旺盛的年级,喜欢探索新事物,有一定的逻辑思维能力。

教学要求:注重理论与实践相结合,关注学生个体差异,提供个性化指导,鼓励学生发挥创意,培养解决问题和团队协作能力。

通过本课程的学习,使学生达到预定的学习成果。

二、教学内容1. 编程语言基础:回顾变量、数据类型、运算符等基本概念,确保学生能够熟练运用。

2. 控制结构:讲解循环结构(for、while)、条件语句(if-else)的使用,为游戏逻辑提供支持。

3. 函数与模块:介绍函数的定义、调用和返回值,使学生能够模块化编程,提高代码可读性。

4. 游戏设计原理:学习坐标系、运动和碰撞检测等游戏开发基本原理。

5. 打砖块游戏实现:根据教材相关章节,分解游戏开发步骤,包括:- 游戏界面的设计和绘制- 砖块和球拍对象的创建与控制- 球的运动和碰撞处理- 游戏逻辑和得分系统6. 调试与优化:教授学生如何调试程序、查找和修复错误,以及优化代码性能。

7. 项目实践:安排课时让学生团队协作,完成打砖块游戏的开发,鼓励创新和美化界面。

教学进度安排:- 第一周:复习编程语言基础,讲解控制结构。

J2ME打砖块游戏

J2ME打砖块游戏
Make Presentation much more fun
指导老师:庄景晖
游戏主要凼数
• Plank木板类:
木板的左秱和右秱: public void moveLeft(){//木板左秱 if(plank.getX()>0){ plank.move(-2, 0); } } public void moveRight(){//木板右秱 if(plank.getX()<screenWidthplank.getWidth()){ plank.move(2, 0); } } 获取木板当前的位置信息: public Sprite getPlank(){//获得挡板对象 return plank; } public int getX(){//获得位置信息:X位置 return plank.getX(); } public int getY(){//获得位置信息:Y位置 return plank.getY(); }
虫虫大作战
小组成员:林情、林清、陈家稳 指导老师:庄景晖
任务分工
林清(设 计游戏主 框架,调 试程序)。
林情(Word文档 及PPT的编写,游 戏素材的搜集修 改,协助调试程 序);
陈家稳(设 计游戏程序, 优化游戏程 序,游戏素 材的修改);
目录
前言 设计内容 游戏设计思路 系统总体架构 系统流程图
• Apple苹果类: • 苹果在整个游戏类中 应该属于相对灵活的 对象,整个游戏关键 是苹果的碰撞反弹, 苹果经过碰撞--->反 弹--->碰撞来实现打 虫虫的效果。 • 苹果的秱动:根据苹 果的位置和活动范围 迕行碰撞检测和反弹 控制,凼数如下:
• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •戏是一种动作电子游戏的名称。玩家操作一 根萤幕上水平的弹板,让一颗丌断弹来弹去的“苹果”在 撞击作为过关目标消去的“虫子”的途中丌会落到屏幕底 下。苹果碰到虫虫、弹板不底下以外的三边会反弹,落到 底下会游戏结束,把虫子全部消去就可以破关。游戏的功 能包含以下内容。 • 基本的游戏操作: • 用户可以通过鼠标戒者键盘来操作弹板,尽量让苹果丌要 掉下底下。开始按钮和暂停按钮可以控制游戏的迕行。

打砖块游戏课程设计报告分解

打砖块游戏课程设计报告分解

目录第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程序设计题目打砖块游戏:作为我们一款熟知的游戏我想大家都不陌生吧,就是通过挡板把小球挡回,不让小球落地,直到打光所有砖块为止,游戏过关进入更难得模式小球速度更快,砖块组成的图案发生改变,是一个很有趣味的小游戏。

打砖块JAVA游戏代码

打砖块JAVA游戏代码

#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(); }。

《打砖块》游戏设计报告

《打砖块》游戏设计报告

——《打砖块》学院:班级:学号:姓名:一.游戏设计规则游戏开始时,小球会停在挡板正中间,且此时挡板可左右自由移动,当按下空格键后小球会弹出,并在程序设定的区域内不停的碰撞反弹。

当小球碰到墙壁、挡板和砖块时,均会以相反的速度反弹,并且砖块被碰撞后会自动消失。

挡板可左右移动以接住小球,若小球没有被接住,超出指定区域下边缘,则程序会自动提示“游戏结束”,点击“确定”后退出程序。

当所有的砖块均消失时,程序会弹出提示“恭喜你,你赢了”。

二.游戏设计思路整个游戏可以分为三个类:小球类、挡板类和砖块类。

其中最简单的当然是挡板了,在回调函数中增加“WM_KEYDOWN”的按键消息,在里面编写控制挡板移动的代码,挡板的移动是通过“上、下、左、右”四个键来实现的。

砖块在整个程序中负责两件事情,其一是程序初始化时随着小球和挡板出现在游戏界面中,再就是被小球碰到后消失。

控制砖块出现与否是通过一个bool变量“blockExist”来实现的,当该变量为“true”时,就将砖块贴到目标DC上,否则就不贴。

由于砖块数量很多,故可以用一个for循环来实现,所有的砖块用的都是一张图片,而变化的只是砖块的坐标。

本游戏中最复杂的要数小球了,因为小球要涉及到很多碰撞检测和反弹,而且这其中还和砖块、挡板有联系。

小球涉及到的碰撞有:小球与墙壁碰撞、小球与挡板碰撞、小球与砖块碰撞。

碰撞检测实际上是检测小球的坐标是否进入了某个特定的区域,若进入了,则小球要反弹;否则,按原来的路线继续前进。

小球能不断的反弹,事实上靠的是小球速度方向的改变,对于小球而言,它能出现在某个点上,是它所在坐标系中的坐标导致的。

若设小球的坐标为(x_ball,y_ball),其速度为水平:vx,竖直:vy,将其坐标与速度之间建立赋值关系,即:x_ball+=vx,y_ball-=vy。

只要对其坐标进行相对应的计算,就能控制小球的反弹了。

三.游戏主要代码int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){// TODO: Place code here.MSG msg;HACCEL hAccelTable;// Initialize global stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_APIDEMOGAME, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// Perform application initialization:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_APIDEMOGAME);// Main message loop:while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return msg.wParam;}A TOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = (WNDPROC)WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APIDEMOGAME);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = (LPCSTR)IDC_APIDEMOGAME;wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);return RegisterClassEx(&wcex);}BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){hInst = hInstance; // Store instance handle in our global variablehWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW ,400, 100, 400, 500, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);GetClientRect(hWnd,&rect); //取得内部窗口区域大小HBITMAP bmp;m_bg=(HBITMAP)LoadImage(NULL,"matlab.bmp",IMAGE_BITMAP,0,0, LR_LOADFROMFILE);m_board=(HBITMAP)LoadImage(NULL,"Board.bmp",IMAGE_BITMAP,0, 0,LR_LOADFROMFILE);m_ball=(HBITMAP)LoadImage(NULL,"ball_0.bmp",IMAGE_BITMAP,0,0, LR_LOADFROMFILE);bgDC=GetDC(hWnd);mdc=CreateCompatibleDC(bgDC);scDC=CreateCompatibleDC(bgDC);boardDC=CreateCompatibleDC(bgDC);ballDC=CreateCompatibleDC(bgDC);bmp=CreateCompatibleBitmap(bgDC,1024,745);SelectObject(mdc,bmp);SelectObject(scDC,m_bg);SelectObject(ballDC,m_ball);SelectObject(boardDC,m_board);int i;int bx=40,by=30; //控制砖块坐标//初始化砖块for(i=0;i<BN;i++){if(block[i].blockExist)block[i].bKilled=0;block[i].blockDC=CreateCompatibleDC(bgDC);m_block[i]=(HBITMAP)LoadImage(NULL,"block.bmp",IMAGE_BITMAP, 32,21,LR_LOADFROMFILE);SelectObject(block[i].blockDC,m_block[i]);block[i].rc.left=bx;block[i].rc.top=by;block[i].rc.right=block[i].rc.left+64;block[i].rc.bottom=block[i].rc.top+32;bx+=60;}return TRUE;}/********控制小球碰壁后反弹*************/ void DrawBall(){//计算X轴方向贴图坐标与速度x_ball+=vx;if(x_ball<=0){x_ball=0;vx=-vx;bHeng=false;}else if(x_ball>=rect.right-32){x_ball=rect.right-32;vx=-vx;bHeng=true;}//计算Y轴方向贴图坐标与速度y_ball-=vy;if(y_ball<=0){y_ball=0;vy=-vy;bZong=false;}/* if(y_ball>=rect.bottom-32){y_ball= rect.bottom-32;vy=-vy;}*/}/*****判断小球是否与砖块相碰*******/void CheckCrashBlock(){int i;float WIDTH = 96;float HEIGHT = 64;float tan=HEIGHT / WIDTH;//tanθ的值for(i=0;i<BN;i++){float x_ =(float)(x_ball - block[i].rc.left);float y_ =(float)(y_ball - block[i].rc.top);if((x_ball>=block[i].rc.left-32&&x_ball<=block[i].rc.right)&&(y_ball>=bloc k[i].rc.top-32&&y_ball<=block[i].rc.bottom)){block[i].bKilled=1;block[i].blockExist=false;num--;}else if(tan > abs(y_ / x_)) //在1、3区域{vx=-vx;x_ball=vx;}else //在2、4区域{vy=-vy;y_ball-=vy;}*/}}}/*****判断小球是否与挡板相碰******/void CheckCrashBoard(){if((y_ball+32)>y){if(((x_ball+64)>=x)&&(x_ball<=(x+128))){vy=-vy;y_ball-=vy;// vx=10;}else{MessageBox(hWnd,"游戏结束","提示",MB_OK|MB_ICONSTOP);exit(0);}}}void DrawMap(){GetClientRect(hWnd,&rect); //取得内部窗口区域大小int i;if(!win){BitBlt(mdc,0,0,1024,745,scDC,0,0,SRCCOPY);for(i=0;i<BN;i++){CheckCrashBlock();if(block[i].bKilled) //||block[i].blockDC==0continue;else{BitBlt(mdc,block[i].rc.left,block[i].rc.top,block[i].rc.right-block[i].rc.left,blo ck[i].rc.bottom-block[i].rc.top,block[i].blockDC,0,0,SRCCOPY);}}//挡板贴图BitBlt(mdc,x,y,128,32,boardDC,0,0,SRCCOPY);//小球贴图if(isKeyDown){DrawBall();CheckCrashBoard();}BitBlt(mdc,x_ball,y_ball,32,32,ballDC,32,0,SRCAND);BitBlt(mdc,x_ball,y_ball,32,32,ballDC,0,0,SRCPAINT);}//将整个图贴到目的DC上BitBlt(bgDC,0,0,1024,745,mdc,0,0,SRCCOPY);}DWORD WINAPI ThreadProc(LPVOID lpParameter ){void *ct = (void *)lpParameter;while(1){DrawMap();Sleep(80);}delete ct;return 0;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;void *ct;TCHAR szHello[MAX_LOADSTRING];LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);GetClientRect(hWnd,&rect);switch (message){case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);// Parse the menu selections:switch (wmId){case IDM_START:{CreateThread(NULL,1024,ThreadProc,ct,0,NULL);}break;case IDM_STARTAGAIN:{x=300;y=300;x_ball=319;y_ball=270;DrawMap();}break;case IDM_ABOUT:DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:{hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...HBITMAPm_bottom=(HBITMAP)LoadImage(NULL,"matlab.bmp",IMAGE_BITMAP,102 4,745,LR_LOADFROMFILE);HDC hDC=CreateCompatibleDC(hdc);SelectObject(hDC,m_bottom);BitBlt(hdc,0,0,1024,745,hDC,0,0,SRCCOPY);DeleteObject(m_bottom);DeleteDC(hDC);ReleaseDC(hWnd,hdc);EndPaint(hWnd, &ps);}break;case WM_KEYDOWN:{switch(wParam){case VK_LEFT:x-=30;if(x<=0)x=0;if(!isKeyDown)x_ball-=30;break;case VK_RIGHT:x+=30;if(x>=rect.right-128)x=rect.right-128;if(!isKeyDown)x_ball+=30;break;case VK_SPACE:isKeyDown=1;break;}}break;case WM_DESTROY:PostQuitMessage(0);KillTimer(hWnd,1);DeleteObject(m_ball);DeleteDC(ballDC);DeleteObject(m_bg);DeleteObject(m_board);DeleteDC(scDC);DeleteDC(boardDC);ReleaseDC(hWnd,bgDC);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}// Mesage handler for about box.LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){switch (message){case WM_INITDIALOG:return TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return TRUE;}break;}return FALSE;}四.游戏截图游戏截图(一)游戏截图(二)。

J2ME手机游戏设计之“打砖块”

J2ME手机游戏设计之“打砖块”

J2ME手机游戏设计之“打砖块”一、游戏分析:随着现代社会发展的日新月异,人们平常工作学习的竞争也在加大,生活的压力也跟着加重。

所以利用闲暇之余,大家都需要休闲娱乐工具,来放松自己,缓解压力,消除紧张的疲劳状态。

在这样的背景下,打砖块游戏作为一向休闲手机游戏应运而生,它不仅能舒缓我们的身心,而且能够开发我们的动手能力,提高自己的反应敏捷程度,充实自己。

二、游戏规则设计:BeatBrick:打砖块游戏的游戏规则为,每局有三个球,也就是有三条生命。

首先发球,球在击打砖块后弹回。

此时,须用球拍接住弹回的球并令其继续击打砖块。

否则,球会掉出屏幕。

直至球全部使用完或通全关则游戏结束。

游戏开始时,小球会停在挡板正中间,且此时挡板可左右自由移动,当按下空格键后小球会弹出,并在程序设定的区域内不停的碰撞反弹。

当小球碰到墙壁、挡板和砖块时,均会以相反的速度反弹,并且砖块被碰撞后会自动消失。

挡板可左右移动以接住小球,若小球没有被接住,超出指定区域下边缘,则程序会提示游戏结束,点击“确定”后退出程序。

当所有的砖块均消失时,程序会提示你赢了。

三、游戏实现:1、J2ME,即Java 2 Micro Edition,是SUN公司推出的在移动设备上运行的微型版Java平台,常见的移动设备有手机,PDA,电子词典,以及各式各样的信息终端如机顶盒等等。

最重要的移动终端当然是手机了,因此,我们主要讨论手机相关的J2ME规范。

J2ME是Sun公司为嵌入式开发所定义的一个框架,一系列标准的规范所组成。

所以J2ME是一个协议簇,而不是单一的规范。

2、游戏由6个类构成:GameScreen:GameScreen类表示游戏的核心,它包括对象的移动、图像的绘制以读取和响应用户的输人。

本游戏从MIDP LCDUI的低级Canvas类派生一个类来代表游戏的屏幕,后面将对这个类进行详细的说明。

BeatBrick:由MIDIet继承而来的应用程序类来代表这个应用程序。

简单的打砖块游戏

简单的打砖块游戏

程序设计课程报告————简单的打砖块游戏1.1任务目的结合本学期所学的C++相关知识,包括循环语句、if语句、结构分支swhich 语句和时间控制函数等的运用,以及一些小操作,以巩固知识和开拓创新为目的编制一个简单的打砖块小游戏。

1.2任务要求要求学生自主的完成小游戏的相关设计和调试,并且达到游戏的基本效果。

要求游戏编码达到300行以上,写下一些基本函数的作用。

2.任务内容自主设计一个小游戏,并用现有知识实现小游戏的一些基本功能。

我设计的是一个打砖块的小游戏,在dos界面下能够实现小球的移动,反弹,和挡板的左右移动及输入命令进行操控。

我编写了300多行相关代码,并在一些主要的函数和命令旁进行了标注诠释,使代码具有一定的可读性。

详细设计说明3.1模块描述本实验分三个模块,分别是用小星号画游戏中的各个部件包括矩阵砖列、小球、挡板。

在这一模块中,可分别定义一个子函数来画这三个部件。

还有一个是用一个子函数调用者三个子函数组成一副游戏中要用到的基本图形,方便在以后主函数中调用,这样节省了许多重复的调用。

最后是主函数部分,主函数包括两个部分也就是两个if语句的使用,其中一个用来控制挡板向左移动并判断是否结束,一个用来控制挡板向右移并判断是否继续。

简单的图形描述:图3.13.2 性能、输入项、输出项。

性能描述:在这个程序中,先出现一个演示图提示打砖块的基本方法和规则,然后会出现“想左移还是向右移的提示”,通过键盘输入一个命令代表方向控制挡板的移动方向,不同的方向会出现不同的结果。

输入项及输出项:在这个实验中,由玩家手动输入方向实现对画面的操作。

采用键盘输入代表方向的命令(数字或字母)。

画面输出相应效果。

3.3 各个模块的的算法:在绘制各个部件的模块中,绘制矩阵砖列只需用两个循环控制“*”的输出形成一个矩形的砖块,再用两个循环控制矩形砖块的排列形成一个矩形的砖块阵列。

而挡板的绘制则更加简单,只需将“*”排成一排构成挡板的形状即可。

JavaFX打砖块游戏开发第一课

JavaFX打砖块游戏开发第一课

突然发现,之前还有个JavaFX游戏开发第一课。

不过,这两个教程并不冲突。

目前这个系列是做一个完整的打砖块游戏。

第一课主要用到的知识有,JavaFX的动态绑定,Rectangle的使用,简单的MouseMove事件,BoxBlur特效。

那么,我们首先创建一个名叫BrickBlock的JavaFX Project。

本人是使用的e(fx)clipse 进行开发的。

e(fx)clipse的官方网站为:/,下载整合插件的eclipse即可。

首先创建一个游戏对象的基类BaseObject,继承于Parent。

import javafx.beans.property.DoubleProperty;import javafx.beans.property.SimpleDoubleProperty;import javafx.scene.Parent;/*** @author wing* @date 2012/7/26*/public abstract class BaseObject extends Parent{protected DoubleProperty widthProperty = new SimpleDoubleProperty(0);protected DoubleProperty heightProperty = new SimpleDoubleProperty(0);protected DoubleProperty xProperty = new SimpleDoubleProperty(0);protected DoubleProperty yProperty = new SimpleDoubleProperty(0);public DoubleProperty widthProperty() {return widthProperty;}public double getWidth(){return widthProperty.get();}public void setWidth(double width){this.widthProperty.set(width);}public DoubleProperty heightProperty() {return heightProperty;}public double getHeight(){return heightProperty.get();}public void setHeight(double height){this.heightProperty.set(height);}public DoubleProperty xProperty() {return xProperty;}public double getX(){return xProperty.get();}public void setX(double x){this.xProperty.set(x);}public DoubleProperty yProperty() {return yProperty;}public double getY(){return yProperty.get();}public void setY(double y){this.yProperty.set(y);}public void moveX(double x){this.xProperty.set(getX() + x);}public void moveY(double y){this.yProperty.set(getY() + y);}public boolean isCollisionWith(BaseObject baseObject){if(getX() + getWidth() &gt; baseObject.getX() &amp;&amp; getX() &lt; baseObject.getX() + baseObject.getWidth() &amp;&amp; getY() + getHeight() &gt; baseObject.getY() &amp;&amp; getY() &lt; baseObject.getY() + baseObject.getHeight()){return true;}return false;}}可以看到,基类BaseObject中,包含有坐标和宽高的属性,并且还有一个检测碰撞的isCollisionWith方法。

java 打砖块程序

java   打砖块程序
ball ball;
dazhuankuai dzk;
int score=0;
boolean[][] matrix;
Color[][] brickcolor;
int[][] brickint;
int leftpoint=180;
int i,j;
board(dazhuankuai dzk)
{if(brickint[i][j]==1)
score+=20;
if(brickint[i][j]==2)
score+=30;
else score+=10;}
}
public void run(){
timer.schedule(new java.util.TimerTask(){
ball.x+=ball.vx;
ball.y-=ball.vy;
}
}
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
begin();
}
public void begin()
{ b=new board(this);
b.run();
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;

编程实现的有趣打砖块游戏指南

编程实现的有趣打砖块游戏指南

编程实现的有趣打砖块游戏指南打砖块游戏(Brick breaker game)是一款经典的街机游戏,已经在电脑和手机上流行了很多年。

如果你对编程有一定了解,并想挑战自己创建一个有趣的游戏,那么本文将为你提供一个简单的指南,帮助你使用编程语言来实现一个打砖块游戏。

1. 游戏的基本原理在开始编写游戏之前,我们首先需要了解游戏的基本原理。

打砖块游戏的目标是使用一个移动的板挡住从顶部下落的小球,同时击碎顶部的砖块。

如果球碰到板或砖块,它会反弹。

当所有砖块都被击碎后,游戏胜利。

如果小球触底,游戏失败。

2. 游戏的基本元素打砖块游戏通常由以下几个基本元素组成:- 小球:代表游戏中的球体,会从顶部开始下落。

- 板:用于挡住小球,并反弹它。

- 砖块:顶部出现的多个砖块,玩家需要击碎它们。

- 壁:游戏区域的四周,小球碰到壁会反弹。

3. 编程语言的选择你可以根据自己的编程经验选择适合你的编程语言。

常用的语言如Python、JavaScript、C++等都可以完成该项目。

这里我们以Python为例进行讲解。

4. 游戏的实现在代码编写过程中,首先我们需要创建一个窗口来显示游戏,然后绘制出小球、板、砖块和壁等元素。

我们可以利用Python的图形库,如Pygame或Turtle来实现窗口和绘图的功能。

下面是一个简单的Python代码示例:```python# 导入所需的库import pygame# 初始化游戏pygame.init()# 创建游戏窗口screen = pygame.display.set_mode((800, 600))pygame.display.set_caption("打砖块游戏")# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsescreen.fill((0, 0, 0)) # 设置背景颜色为黑色pygame.display.flip()# 退出游戏pygame.quit()```在以上代码中,我们首先导入Pygame库,然后初始化游戏,并创建一个800x600像素的窗口。

Java实现经典游戏打砖块游戏的示例代码

Java实现经典游戏打砖块游戏的示例代码

Java实现经典游戏打砖块游戏的⽰例代码⽬录前⾔主要设计功能截图代码实现游戏核⼼类⼩球类砖块类总结前⾔《JAVA打砖块》游戏是⾃制的游戏。

玩家操作⼀根萤幕上⽔平的“棒⼦”,让⼀颗不断弹来弹去的“球”在撞击作为过关⽬标消去的“砖块”的途中不会落到萤幕底下。

主要设计设计游戏界⾯,⽤swing实现设计砖块,砖块类,设计⼩球,满屏乱跑的⼩球类,负责打碎砖块设计棒⼦,左右移动的⽊头板类球碰到砖块、棒⼦与底下以外的三边会反弹,落到底下会失去⼀颗球,把砖块全部消去就可以破关。

⼩球碰到砖块的回调算法设计⼩球碰到棒⼦的回调算法设计设计碰撞特效,⼀个负责显⽰爆炸效果的类设计⾳效类,碰撞时发出⾳效。

功能截图游戏开始:碰撞效果:代码实现游戏核⼼类public class BricksGame extends BaseGame {private ArrayList<GameObject> list = new ArrayList<>();private RenderTask render;private Random random = new Random();private boolean over;private Image memImage;private Graphics memG;// 双缓冲的画布public BricksGame(int width, int height, String title) throws HeadlessException {super(width, height, title);super.setBgColor(new Color(0x23,0x30,0x41));initGame(width, height);}private void initGame(int width, int height) {setFps(60);over=false;// 获取窗⼝的内外⼤⼩Container contentPane = this.getContentPane();Dimension size = contentPane.getSize();int contentWidth = size.width;int contentHeight = size.height;this.setContentWidth(contentWidth);this.setContentHeight(contentHeight);//System.out.println(contentPane instanceof JPanel);// true//System.out.println(size.width);//582//System.out.println(size.height);//403// 窗⼝四个⽅向的边界值Insets insets = getInsets();//System.out.println(insets.top);//System.out.println(insets.bottom);//System.out.println(insets.left);//System.out.println(insets.right);Scene env = new Scene(width, height, new Margin(insets.left, insets.right, insets.top, insets.bottom)); ImageIcon woodIcon = new ImageIcon("image/wood.png");int w = woodIcon.getIconWidth();int h = woodIcon.getIconHeight();Wood wood = new Wood(w, h, new Color(0x97, 0x5B, 0x12));wood.setScene(env);wood.setX(getWidth()/2 - w/2);wood.setY(getHeight()-50);wood.setImage(woodIcon.getImage());list.add(wood);Ball ball = new Ball(10, Color.WHITE);ImageIcon iconBall = new ImageIcon("image/ball2.png");ball.setImage(iconBall.getImage());ball.setScene(env);ball.setCoordinator(width / 2 - ball.getRadius(), wood.getY()-ball.getRadius()*2);ball.setWoodBar(wood);list.add(ball);Color[] colors = new Color[]{new Color(0xAA, 0xCF, 0x51),new Color(0xFC, 0xA9, 0x4B),new Color(0x73, 0xC7, 0xFF),Color.PINK,Color.GRAY};//ImageIcon brickIcon = new ImageIcon("image/brick_1.png");int brW = 60;int brH = 30;int start = 25;int brickX = start;int brickY = 100;int brickAreaWidth = getWidth() - start *2;int count = brickAreaWidth / brW - 1;int remainWidth = brickAreaWidth - count * brW;int intervalHort = brW + 3;start = brickX = (getWidth() - intervalHort * (count)) / 2;int intervalVert = brH + 3;HitBrick hitBrick = new HitBrick();for (int j = 0; j < 3; j++) {// brick linefor(int i = 0; i< count; i++){// brick columnsBrick brick = new Brick();brick.setColor(colors[i % colors.length]);//brick.setImage(brickIcon.getImage());brick.setWidth(brW);brick.setHeight(brH);brick.setX(brickX);brick.setY(brickY);brick.setBall(ball);brick.setHitListener(hitBrick);brickX += intervalHort;list.add(brick);}brickX = start;brickY += intervalVert;}// 双缓冲,在内存⾥⾯创建⼀个和窗⼝JFrame⼀样⼤⼩的ImagememImage = createImage(getWidth(), getHeight());memG = memImage.getGraphics();GameOver gameOver = new GameOver(memG);ball.setGameOverListener(gameOver);// 键盘事件的监听Input input = new Input();input.init();addKeyListener(input);// 重新渲染画⾯任务render = new RenderTask(this);render.start();addMouseListener(new MouseAdapter() {@Overridepublic void mousePressed(MouseEvent e) {//super.mousePressed(e);System.out.println(String.format("x:%d, y:%d", e.getX(), e.getY()));//x:218,y:305,w:164,h:45if ((e.getX() >= 218 && e.getX() <=(218+164))&& (e.getY() >= 305 && e.getY() <= (305+45))){render.setExitd(true);render = null;memImage = null;memG = null;removeKeyListener(input);removeMouseListener(this);list.clear();initGame(width, height);}}});}@Overridepublic void paint(Graphics g) {clear(memG);// 将画布清空为背景⾊for (int i = 0; i < list.size(); i++) {list.get(i).onTick();list.get(i).draw(memG);}if (list.size() == 2){// 只剩下⼩球和挡板,则通关成功!Wood wood = (Wood) list.get(0);wood.setX(getWidth()/2 - wood.getWidth()/2);wood.setY(getHeight()-50);Ball ball = (Ball) list.get(1);ball.setCoordinator(getWidth() / 2 - ball.getRadius(), /*bottom*/wood.getY()-ball.getRadius()*2); ball.setMoving(false);String gameOver = "恭喜通关!";memG.setFont(new Font("Serif", Font.BOLD, 35));int stringWidth = memG.getFontMetrics().stringWidth(gameOver);memG.setColor(Color.RED);memG.drawString(gameOver, getWidth()/2 - stringWidth/2, getHeight()/2);stopRenderTask();}if (over) {String gameOver = "Game Over";memG.setFont(new Font("Serif", Font.BOLD, 35));int stringWidth = memG.getFontMetrics().stringWidth(gameOver);memG.setColor(Color.WHITE);memG.drawString(gameOver, getWidth()/2 - stringWidth/2, getHeight()/2);String playAgain = "重新开始";stringWidth = memG.getFontMetrics().stringWidth(playAgain);int increase = 16;int fontSize = memG.getFont().getSize();int rectH = (int) (fontSize * 1.3);int rx=getWidth()/2 - stringWidth/2 - increase /2;int ry=getHeight() - fontSize * 4-(rectH-fontSize)/2;int rw = stringWidth + increase;int rh = rectH;//System.out.println(String.format("x:%d,y:%d,w:%d,h:%d", rx, ry, rw, rh));memG.drawRect(rx, ry, rw, rh);memG.setColor(new Color(33, 165, 230));memG.drawString(playAgain, getWidth()/2 - stringWidth/2, getHeight() - fontSize * 3 - 5); }// 将内存Image的内容复制到窗⼝上g.drawImage(memImage, 0, 0, null);// 耗性能的轮询判断,⼀个对象是否要消失for (int i = 2; i < list.size(); i++) {// 0,1位置是挡板和⼩球,不能消失GameObject gameObject = list.get(i);if (gameObject.isGone()) {list.remove(i);--i;}}}private void stopRenderTask() {new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}render.setExitd(true);}}).start();}public void exit(){//System.exit(1);}public void clear(Graphics g){if (g!=null) {g.setColor(getBgColor());g.fillRect(0, 0, getWidth(), getHeight());}}// ⼩球碰到砖块的回调class HitBrick implements Brick.HitListener{private ExecutorService executorService = Executors.newFixedThreadPool(3);private File file = new File("audio/brick2.wav");private AudioClip audio;public HitBrick() {try {audio = Applet.newAudioClip(file.toURI().toURL());} catch (MalformedURLException e) {e.printStackTrace();}}@Overridepublic void hit(Brick brick) {executorService.execute(new PlayHitAudioTask(audio));ExplodeObject eo = new ExplodeObject();eo.x = brick.x;eo.y = brick.y;eo.width = brick.width;eo.height = brick.height;eo.color = brick.color;list.add(eo);}}// 游戏结束内容的绘制class GameOver implements Ball.GameOverListener{private Graphics memG;public GameOver(Graphics g) {this.memG = g;}@Overridepublic void over() {over = true;}}}⼩球类public class Ball extends RectGameObject{private int radius;private int speed = 4;// ⼩球移动速度private boolean moving;// 是否在移动private boolean gameOver;// 是否overprivate boolean postv;// 初始⽔平⽅向的移动左右⽅向private int horiMove;// ⽔平移动距离(正负号代表移动⽅向)private int vertMove;// 垂直移动距离(正负号代表移动⽅向)private Wood woodBar;//⽊头板private Image image;private Point center = new Point();private GameOverListener l;public Ball(int radius, Color color){this.radius = radius;this.color = color;}@Overridepublic void draw(Graphics g) {g.setColor(color);//g.drawImage(image, x, y, null);g.fillOval(x, y, radius * 2, radius * 2);}@Overridepublic void onTick() {if (!moving){if(Input.getKeyDown(KeyEvent.VK_UP)){postv = (Math.random() * 10) <= 4 ? true : false;moving = true;gameOver = false;horiMove = postv ? speed : -speed;vertMove = -speed;} /*else if(Input.getKeyDown(KeyEvent.VK_LEFT)){Wood wb = woodBar;if (!wb.isReachEdge()) {transferBy(-wb.getSpeed(), 0);}} else if(Input.getKeyDown(KeyEvent.VK_RIGHT)){Wood wb = woodBar;if (!wb.isReachEdge()) {transferBy(wb.getSpeed(), 0);}}*/}if (moving){// arrive at left and right edgeScene scene = getScene();Margin margin = scene.in;if (x <= margin.left || x >= scene.width - margin.right - radius * 2){ horiMove = -horiMove;}// arrive at top edgeif (y <= margin.top && vertMove < 0){vertMove = -vertMove;}// ⼩球落在了挡板上if(getCenter().x >= woodBar.getX()&& getCenter().x <= woodBar.getX() + woodBar.getWidth() && Math.abs(getCenter().y - woodBar.y) <= radius&& vertMove > 0){vertMove = -vertMove;}// arrive at bottom edge// ⼩球落在了窗⼝的底部,停住⼩球 GAME OVERif (y >= scene.height - margin.bottom - radius * 2){moving = false;gameOver = true;if (l != null)l.over();return;}this.transferBy(horiMove, vertMove);}}public int getRadius() {return radius;}public void setRadius(int radius) {this.radius = radius;}public Wood getWoodBar() {return woodBar;}public void setWoodBar(Wood woodBar) {this.woodBar = woodBar;}public Image getImage() {return image;}public void setImage(Image image) {this.image = image;}public boolean isMoving() {return moving;}public void setMoving(boolean moving) {this.moving = moving;}public int getHoriMove() {return horiMove;}public void setHoriMove(int horiMove) {this.horiMove = horiMove;}public int getVertMove() {return vertMove;}public void setVertMove(int vertMove) {this.vertMove = vertMove;}@Overridepublic int getWidth() {return 2 * radius;}@Overridepublic int getHeight() {return getWidth();}public Point getCenter(){center.x = x + radius;center.y = y + radius;return center;}public boolean isGameOver() {return gameOver;}public void setGameOver(boolean gameOver) {this.gameOver = gameOver;}public GameOverListener getGameOverListener() {return l;}public void setGameOverListener(GameOverListener l) {this.l = l;}public interface GameOverListener{void over();}}砖块类package game;import java.awt.*;public class Brick extends RectGameObject {private Ball ball;private Point leftTop = new Point();private Point leftBottom = new Point();private Point rightTop = new Point();private Point rightBottom = new Point();public Brick(){}@Overridepublic void draw(Graphics g) {g.setColor(getColor());g.fillRect(x, y, getWidth(), getHeight());}@Overridepublic void onTick() {if (ball.isMoving()) {//start 碰撞检测/////////////////////////////////////////////boolean is = isSameQuadrant(ball.getCenter(), getLeftTop(), getRightBottom()); if (is) {int r = ball.getRadius();Point lt = getLeftTop();Point lb = getLeftBottom();Point rt = getRightTop();Point rb = getRightBottom();Point c = ball.getCenter();int dx1 = Math.abs(c.x - lt.x), dy1 = Math.abs(c.y - lt.y);int dx2 = Math.abs(c.x - lb.x), dy2 = Math.abs(c.y - lb.y);int dx3 = Math.abs(c.x - rt.x), dy3 = Math.abs(c.y - rt.y);int dx4 = Math.abs(c.x - rb.x), dy4 = Math.abs(c.y - rb.y);if(((dx1*dx1) + (dy1*dy1) <= r*r)||((dx2*dx2) + (dy2*dy2) <= r*r)||((dx3*dx3) + (dy3*dy3) <= r*r)||((dx4*dx4) + (dy4*dy4) <= r*r)){System.out.println("发⽣了碰撞");if (hitListener != null) {hitListener.hit(this);}setGone(true);}} else {Point c = ball.getCenter();int squareW = ball.getRadius() * 2;int squareH = squareW;int brcx = x + getWidth() / 2;int brcy = y + getHeight() / 2;if((Math.abs(c.x - brcx) <= (squareW + getWidth())*0.5)&&(Math.abs(c.y - brcy) <= (squareH + getHeight())*0.5)){System.out.println("......发⽣碰撞");if (hitListener != null) {hitListener.hit(this);}setGone(true);/* 击中砖块,改变⼩球的⽅向 */// 判断⼩球⾸先撞击的是砖块的左右还是上下侧,⾮常重要,否则出现不合理的移动⽅向。

打砖块java代码详细

打砖块java代码详细
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
private int ball源自 = 50;private int ballY = 30;
private Thread th;
private int moveAngle = 30;
private int moveStep = 10;
private final double PI = 3.1415926;
}
@Override

Java打砖块游戏源码

Java打砖块游戏源码

打砖块1 窗体package com.game;import java.awt.*;import java.awt.event.*; import javax.swing.*;/*** 打砖块游戏* @author 孙沛林**/public class MyWindow {public static void main(String[] args) {JFrame f = new JFrame("打砖块");f.setSize(500,500);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);MyPanel mp = new MyPanel();f.add(mp);// 键盘监听mp.addKeyListener(mp);f.addKeyListener(mp);f.setVisible(true);}}2 面板package com.game;import java.awt.*;import java.awt.event.*;import javax.swing.*;/*** 游戏界面* @author 孙沛林**/public class MyPanel extends JPanel implements Runnable, KeyListener{Thread t = null; // 线程int speed = 8; // 暂停的毫秒数Ball ball; // 小球Pane pane; // 挡板int m = 8; // 横向砖块int n = 5; // 纵向砖块Block[][] blocks; // 砖块数组/*** 构造器*/public MyPanel(){ball = new Ball();// 生成小球pane = new Pane(); // 生成挡板blocks = new Block[m][n];// 生成砖块数组for(int i = 0; i<m; i++ ){for (int j = 0; j < n; j++) {blocks[i][j] = new Block(i,j);}}t = new Thread(this); // 产生线程t.start(); // 启动线程}/*** 绘图*/public void paint(Graphics g){g.clearRect(0, 0, 500, 500);// 边界g.setColor(Color.blue);g.drawRect(40, 40, 400, 400);// 挡板g.setColor(Color.gray);for(int i = 0; i<m; i++ ){for (int j = 0; j < n; j++) {if(blocks[i][j].visible){g.fillRoundRect(blocks[i][j].x, blocks[i][j].y, blocks[i][j].w, blocks[i][j].h, blocks[i][j].r, blocks[i][j].r);}}}// 小球g.setColor(Color.black);g.fillOval(ball.x, ball.y, ball.d, ball.d);// 挡板g.setColor(Color.orange);g.fillRoundRect(pane.x, pane.y, pane.w, pane.h, pane.r, pane.r);}/*** 运行*/public void run() {while(true){ball.move();// 小球移动一步for(int i = 0; i<m; i++ ){for (int j = 0; j < n; j++) {if(blocks[i][j].visible){blocks[i][j].crash(ball);// 碰撞判断+处理}}}repaint();try {t.sleep(speed);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/*** 按下键盘*/public void keyPressed(KeyEvent e) {if(e.getKeyCode() == KeyEvent.VK_LEFT){pane.left();}if(e.getKeyCode() == KeyEvent.VK_RIGHT){pane.right();}}public void keyReleased(KeyEvent arg0) {// TODO Auto-generated method stub}public void keyTyped(KeyEvent arg0) {// TODO Auto-generated method stub}}3 小球package com.game;/***小球类*@author孙沛林**/public class Ball {/***属性*/int x =100;int y =200;int dx = 1;int dy = 1;int d = 10; // 直径/* 容器的参数 */int xContainer = 40;int yContainer = 40;int width = 400;int height = 400;/***构造器*/public Ball(){}/***移动一步*/public void move(){x += dx;y += dy;this.wall();}/***碰四周边界反弹*/public void wall(){if(x < this.xContainer || x > this.xContainer+this.width - d ){dx *= -1;}if(y < this.yContainer || y > this.yContainer+this.height - d ){ dy *= -1;}}}4 挡板package com.game;/***挡板类-圆角矩形*@author孙沛林**/public class Pane {int x = 200;int y = 440;int dx = 4;int w = 80; // 自宽int h = 10; // 自高int r = 5; // 圆角弧度/* 容器的参数 */int xContainer = 40; // 容器起点横坐标int width = 400; // 容器宽度/***构造器*/public Pane(){}/***←移动*/public void left(){if(x>this.xContainer){x -= dx;}}/***→移动*/public void right(){if(x<this.xContainer + this.width - this.w){ x += dx;}}}5 砖块package com.game;/***砖块类-圆角矩形*@author孙沛林**/public class Block {int x;int y;int w = 49;int h = 20;int r = 5;int xContainer = 40; // 容器起点横坐标boolean visible = true;/***构造器*/public Block(){}/***构造器*@param x*@param y*/public Block(int x, int y){this.x = x*(w+1) + xContainer + 1;this.y = y*(h+1) + xContainer + 1;}/***计算小球是否接触的砖块*如果接触了左右两边,那么改变小球的dx方向*如果接触了上下两边,那么改变小球的dy方向*同时,本砖块消失*@param ball小球*/public void crash(Ball ball){if(ball.y + ball.d > this.y && ball.y < this.y + this.h// 纵向区间&& (ball.x + ball.d == this.x || ball.x == this.x + this.w ) // 横向区间){ball.dx *= -1;this.visible = false;}if(ball.x + ball.d > this.x && ball.x < this.x + this.w// 纵向区间&& (ball.y+ ball.d== this.y|| ball.y== this.y+ this.h) // 横向区间){ball.dy *= -1;this.visible = false;}}}。

JAVA课程设计打砖块(含代码)

JAVA课程设计打砖块(含代码)

Java程序课程设计任务书一、主要内容打砖块游戏是一种动作电子游戏的名称。

玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。

球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。

二、具体要求通过图形用户界面(Graphics User Interface,GUI)和线程,使用户和程序之间可以方便地进行交互。

运用Swing组件,编写小应用程序游戏,加深对Java语言的理解,深入地了解图形用户界面的设计,更加熟练地运用编程软件。

功能要求:(1)游戏运行需键盘的操作;(2)游戏可统计分数;(3)球落到底下会失去一颗,按ENTER可重新开始。

开发工具:JCreater软件;开发技术:J2ME。

三、进度安排12月28日:课程设计选题,查找参考资料12月29日:完成打砖块游戏程序设计分析12月30日~ 1月3日:完成程序代码的编写1月4日~ 1月5日:游戏测试与完善1月6日~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] (美)埃克尔著陈昊鹏,饶若楠等译. Java编程思想[J]. 机械工业出版社,2005[2](美)Gary J.Bronson著张珑刘雅文译. Java编程原理[J]. 清华大学出版社,2004[3](美)Michael Morrison著徐刚,于健,薛雷译. 游戏编程入门[J]. 人民邮电出版社,2005.9[4](美)Wendy Stahler著冯宝坤,曹英译. 游戏编程中的数理应用[J]. 红旗出版社,2005[5](美)克罗夫特(David Wallace Croft)著彭晖译. Java游戏高级编程[J]. 清华大学出版社,2005[6](美)David Brackeen著邱仲潘译. Java游戏编程[J]. 科学出版社,2004[7] 聂庆亮编著. Java应用开发指南[J]. 清华大学出版社,2010[8] 耿祥义,张跃平编著. Java面向对象程序设计[J]. 清华大学出版社,2010[9] 杨绍方编著. Java编程实用技术与案例[J]. 清华大学出版社,2000.11[10] 明日科技编著. Java编程全能词典[J]. 电子工业出版社,2010摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。

javascript实现打砖块小游戏(附完整源码)

javascript实现打砖块小游戏(附完整源码)

javascript实现打砖块⼩游戏(附完整源码)⼩时候玩⼀天的打砖块⼩游戏,附完整源码在?给个赞?实现如图需求分析1、⼩球在触碰到⼤盒⼦上、左、右边框,以及滑块后沿另⼀⽅向反弹,在碰到底边框后游戏结束;2、⼩球在触碰到⽅块之后,⽅块消失;3、消除所有⽅块获得游戏胜利;4、可通过⿏标与键盘两种⽅式移动滑块;5、游戏难度可调整,实时显⽰得分。

代码分析1、html结构:左右两个提⽰框盒⼦分别⽤⼀个div,在其中添加需要的内容;中间主体部分⽤⼀个div,⾥⾯包含⼀个滑块(slider),⼀个⼩球(ball),以及⼀个装有所有⽅块的brick盒⼦,我们通过使⽤js在brick中动态添加⽅块,这样⼤⼤减少了div的数量。

简化了html结构。

2、css样式:通过使⽤position:relative/absolute/fixed,完成对整个页⾯的布局;3、js⾏为:⾸先对于⼩球的运动,我们通过使⽤setInterval定时器进⾏实现;⼩球与滑块以及⽅块之间的碰撞,我们通过碰撞检测函数进⾏实现;滑块的移动我们需要设置两种⽅法,通过⿏标实现可以使⽤拖拽;通过键盘实现使⽤键盘事件。

⼀些封装的函数动态创建⽅块函数分析1、⾸先,我们在id=“brick”的div盒⼦中动态插⼊n个⽅块,在css中预先为这些盒⼦设置了固定的宽⾼,并设置了左浮动布局。

这样,所有的⽅块就会按照⾃左到右⾃上⽽下排列在盒⼦中;但是通过浮动布局在中间某⼀个⽅块碰撞消失后,后⾯的⽅块会补充上来,这并不是我们想要的;2、为了防⽌后⾯的⽅块向前移动,显然我们不能使⽤浮动,在这⾥我们对每⼀个⽅块使⽤绝对定位;3、在给每⼀个⽅块进⾏绝对定位之前,我们先要获取它们当前所在位置的left与top值,并赋给它们,否则⽅块将全部挤在⼀个格⼦⾥;4、最后再给每个⽅块进⾏绝对定位。

function createBrick(n){var oBrick = document.getElementById("brick")//在⼤盒⼦brick中插⼊n个div⽅块,并给予随机颜⾊for(var i = 0; i<n; i++){var node = document.createElement("div");node.style.backgroundColor= color();oBrick.appendChild(node);}//获取所有的⽅块var brickArr = obrick.getElementsByTagName("div")//根据每个⽅块当前所在位置,将left与top值赋给⽅块for(var i=0;i<brickArr.length;i++){brickArr[i].style.left = brickArr[i].offsetLeft+"px";brickArr[i].style.top = brickArr[i].offsetTop+"px";}//将所有⽅块设置成绝对定位,注意这⼀步与上⼀步顺序不能调换for(var i =0;i<brickArr.length;i++){brickArr[i].style.position="absolute";}}碰撞检测函数代码分析见上⼀篇function knock(node1,node2){var l1 = node1.offsetLeft;var r1 = node1.offsetLeft + node1.offsetWidth;var t1 = node1.offsetTop;var b1 = node1.offsetTop+node1.offsetHeight;var l2 = node2.offsetLeft;var r2 = node2.offsetLeft + node2.offsetWidth;var t2 = node2.offsetTop;var b2 = node2.offsetTop+node2.offsetHeight;if(l2>r1||r2<l1||t2>b1||b2<t1){return false;}else{return true;}}完整代码(复制可⽤)<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>打砖块⼩游戏</title><style>#box{width: 600px;height: 650px;border: 5px solid rgb(168, 139, 8);position: relative;left: 500px;background:linear-gradient(rgb(19, 192, 120),rgb(47, 32, 114));}#ball{width: 20px;height: 20px;border-radius: 10px;background-color: white;position: absolute;top: 560px;box-shadow: 0px 0px 3px 3px aqua;}#btn{width: 150px;height: 90px;position: fixed;left: 730px;top: 350px;border-radius: 10px;font-size: 24px;cursor: pointer;}#slider{width: 120px;height: 20px;background-color: rgb(168, 139, 8);position: absolute; top: 585px;border-radius: 10px;box-shadow: 0px 0px 2px 2px red;cursor: pointer; }#brick div{width: 98px;height: 20px;float: left;border: 1px solid black;}#tip{width: 280px;position:fixed;top: 100px;left: 150px;border: 1px solid black;text-indent: 2em;padding: 10px;border-radius: 20px; }#grade{width: 180px;position:fixed;top: 100px;left: 1150px;border: 1px solid black;text-indent: 2em;padding: 10px;border-radius: 20px; }#grade h3{font-weight: 500;}</style></head><body><div id="box"><div id="ball"></div><div id="slider"></div><div id="brick"></div></div><div id="tip"><h1>提⽰</h1><p>点击按钮开始游戏</p><p>⽅法1:使⽤⿏标按住滑块,左右拖动,反弹⼩球</p><p>⽅法2:使⽤键盘“左”“右”⽅向键控制滑块移动,按住快速移动</p><p>⼩球触碰到底部为失败</p><p>清空所有⽅块游戏胜利</p></div><div id="grade"><h3>游戏强度:</h3><h2>XXX</h2><h3>得分:</h3><h1>00</h1></div><button id="btn">开始游戏</button><script>var box = document.getElementById("box");var ball = document.getElementById("ball");var btn = document.getElementById("btn");var slider = document.getElementById("slider")var obrick = document.getElementById("brick")var brickArr = obrick.getElementsByTagName("div")var grade = document.getElementById("grade")var rank = grade.children[1]var score = grade.children[3]var sco = 0;var timer;var isRunning = false;var speedX = rand(3,12);var speedY = -rand(3,12);var num =speedX-speedY;console.log(num)switch(num){case 6:case 7:case 8:rank.innerHTML="简单";break;case 9:case 10:case 11:rank.innerHTML="⼀般";break;case 12:case 13:case 14:rank.innerHTML="中等";break;case 15:case 16:case 17:rank.innerHTML="难"break;case 18:case 19:case 20:rank.innerHTML="很难"slider.style.width = 100+"px";break;case 21:case 22:rank.innerHTML="特别难"slider.style.width = 80+"px";break;case 23:case 24:rank.innerHTML="哭了"slider.style.width = 60+"px";break;}//随机⽣成⼩球与滑块位置var beginGo = rand(100,500)ball.style.left = beginGo +40 +"px"slider.style.left = beginGo +"px"//开始按钮点击事件btn.onclick = function(){btn.style.display="none";isRunning = true;clearInterval(timer);timer = setInterval(function(){//获取⼩球初始位置var ballLeft = ball.offsetLeft;var ballTop = ball.offsetTop;//获取⼩球运动之后位置var nextleft = ballLeft + speedX;var nexttop = ballTop + speedY;//⽔平边界判断,当⼩球的left值⼩于容器左边界或者⼤于容器右边界时,将⽔平⽅向速度取反 if(nextleft<=0||nextleft>=box.offsetWidth-ball.offsetWidth-10){speedX=-speedX;}//垂直边界判断,当⼩球的top值⼩于容器上边界时,将垂直⽅向速度取反if(nexttop<=0){speedY=-speedY;}//当⼩球触碰到下边界时,提⽰“游戏失败”,重新刷新页⾯if(nexttop>box.offsetHeight-ball.offsetHeight){location.reload();alert("You were dead!")}//将运动后的位置重新赋值给⼩球ball.style.left = nextleft+"px";ball.style.top= nexttop+"px";//⼩球与滑块的碰撞检测if(knock(ball,slider)){speedY=-speedY;}//⼩球与⽅块的碰撞检测for(var j=0; j<brickArr.length;j++){if(knock(brickArr[j],ball)){speedY=-speedYobrick.removeChild(brickArr[j]);sco++;score.innerHTML=sco;break;}}//当容器中⽅块数量为0时,宣布“游戏胜利”,刷新页⾯if(brickArr.length<=0){location.reload();alert("You win!")}},20)}//⿏标控制滑块slider.onmousedown = function(e){var e = e||window.event;//获取滑块初始位置var offsetX = e.clientX - slider.offsetLeft;if(isRunning){document.onmousemove = function(e){var e = e||window.event;var l =e.clientX-offsetX;if(l<=0){l=0;}if(l>=box.offsetWidth-slider.offsetWidth-10){l=box.offsetWidth-slider.offsetWidth-10 ;}slider.style.left = l + "px";}}}document.onmouseup = function(){document.onmousemove = null;}//按键控制滑块document.onkeydown = function(e){var e = e||window.event;var code = e.keyCode || e.which;var offsetX = slider.offsetLeft;if(isRunning){switch(code){case 37:if(offsetX<=0){slider.style.left=0break;}slider.style.left = offsetX*4/5 + "px";break;case 39:if(offsetX>=box.offsetWidth-slider.offsetWidth-10){slider.style.left=box.offsetWidth-slider.offsetWidth;break;}slider.style.left = (box.offsetWidth-slider.offsetWidth-offsetX)/5 +offsetX + "px";break;}}}createBrick(72)//容器内创建⽅块function createBrick(n){var oBrick = document.getElementById("brick")//在⼤盒⼦brick中插⼊n个div⽅块,并给予随机颜⾊for(var i = 0; i<n; i++){var node = document.createElement("div");node.style.backgroundColor= color();oBrick.appendChild(node);}//获取所有的⽅块var brickArr = obrick.getElementsByTagName("div")//根据每个⽅块当前所在位置,将left与top值赋给⽅块for(var i=0;i<brickArr.length;i++){brickArr[i].style.left = brickArr[i].offsetLeft+"px";brickArr[i].style.top = brickArr[i].offsetTop+"px";}//将所有⽅块设置成绝对定位,注意这⼀步与上⼀步顺序不能调换for(var i =0;i<brickArr.length;i++){brickArr[i].style.position="absolute";}}//随机⽣成颜⾊function color(){var result= "#";for(var i=0;i<6;i++){result += rand(0,15).toString(16)// 把⼗进制的数字变成⼗六进制的字符串:0 1 ...9 a b c d f}return result;}//随机数⽣成function rand(n,m){return n+parseInt(Math.random()*(m-n+1));}//碰撞检测函数function knock(node1,node2){var l1 = node1.offsetLeft;var r1 = node1.offsetLeft + node1.offsetWidth;var t1 = node1.offsetTop;var b1 = node1.offsetTop+node1.offsetHeight;var l2 = node2.offsetLeft;var r2 = node2.offsetLeft + node2.offsetWidth;var t2 = node2.offsetTop;var b2 = node2.offsetTop+node2.offsetHeight;if(l2>r1||r2<l1||t2>b1||b2<t1){return false;}else{return true;}}</script></body></html>以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

打砖块游戏设计_课程设计材料

打砖块游戏设计_课程设计材料




1.要求利用c#的进行代码编辑以及组件开发原理来完成系统的设计;
2.界面要求:要求界面简洁美观,简单易用。



在两周时间内完成编程,并写成报告形式

作计划ຫໍສະໝຸດ 1.准备工作阶段2.选题和资料收集
3.设计阶段
4.调试阶段
5.整理相关资料,完成报告




[1]郑阿奇,梁敬东等.C#实用教程[M].电子工业出版社,2009
课程设计材料
(2016-----2017学年度第一学期)
题 目:打砖块游戏设计
学生姓名:
学生学号:1608220203
专 业:
班 级:
指导教师:
学院制
二0一六年十月十五日
课程设计任务书
学 号
1608220203
学生姓名
专业(班级)
题目
打砖块游戏设计






硬件要求能运行Windows操作系统的微机系统。C#程序设计语言及相应的集成开发环境visual
[6]王进强.Visual 基础教程[M].清华大学出版社,2004
指导教师签字
系主任签字
年月日
课程设计评审表
指导教师评语
成绩
评定
指导教师签字:
年 月 日
答辩教师评语
成绩
评定
答辩教师签字:
年 月 日
二级学院工作小组意见
成绩
评定
二级学院领导签字(盖章):
年 月 日
[2] 刘洪成.C#高级教程[M].清华大学出版社,25003
[3]孙永强等.VisualC#.NE入门与提高[M].北京:清华大学出版社,2002

打砖块JAVA课程设计报告

打砖块JAVA课程设计报告

Java课程设计报告XX / XX 学年第X 学期项目名称:打砖块游戏项目负责人:XXX 学号:XXXXX同组者:XXX 学号:XXXXX同组者:XX 学号:XXXXX指导教师:XXX 班级:XXXXXXX课程设计时间:XXXXXXXXXXXXXXXXXXXX 课程设计地点:XXXXXXXXX[课程设计目的与要求]《JA V A程序设计》是计算机相关专业的必修专业基础课程,起实践性、应用性很强。

实践教学环节是必不可少的一个重要环节。

本课程的程序设计专题实际是计算机相关专业学生学习完《JA V A程序设计》课程后,进行的一次全面的综合训练,JA V A程序设计的实际目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合应用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

能够针对具体的有一定代表性的综合应用类课题设计、分析,全面掌握面向对象的思想、JA V A语言的应用技巧、方法,通过该课程设计使学生进一步理解和掌握利用JA V A 开发综合系统的过程,学会用Eclispe、Jbuilder等开发工具。

同时培养学生的合作意识和团队精神。

培养学生对实际系统的采用面向对象的方法进行分析与设计能力,从而是学生提高JA V A语言运用与开发的综合力。

[课程设计题目]软件系统名称:JA V A打砖块人员安排:任务目的:1.实现游戏的正常运行;2. 培养JAVA程序开发与设计的兴趣;3.培养团队合作意识;[程序中使用的数据结构和符号说明]HitBrick类GreenBallThread 控制小球路线xUp,yUp,bouncing 定义变量存储16位数值形式x,y 小球坐标xDx,yDy 坐标增量MAX_X,MAX_Y 坐标最大值renew 初始化label 标签Rx,Ry 横板坐标Brick[] 砖块ball 小球HitBrick() 定义小球横板及砖块位置坐标keyPressd(keyEent) 定义小球启动键(按空格键启动)keyReleased(keyEvent) 接收键盘事件侦听器接口)keyTyped(keyEvent) 键入空格键时调用keyEventpaint(Graphics) 对砖块填充颜色move 定义小球的运动轨迹和砖块的消失main 主函数BallThread类通过继承Thread类使Ball类线程化,并把小球的弹跳动作放进Run()中执行Brick类定义砖块坐标位置和砖块按钮Ball类定义小球坐标位置[程序设计流程]程序中使用的部分方法解释开始命令:空格键private JLabel label;定义一个标签,label=new JLabel("按空格键开始");内容为空格键开始,addKeyListener(this);定义一个键盘监听器,if (e.getKeyCode() ==e.VK_SPACE) {if(renew){greenBallThread=new BallThread(this);bouncing = true;greenBallThread.start();label.setVisible(false);}renew=false;}重置并开始游戏移动命令:方向键左键和右键if(e.getKeyCode()==e.VK_LEFT){Rx=Rx-20;if(bouncing){if(Rx<0){Rx=0;}}else{if(Rx<0){Rx=0;}else{x=x-20;ball.ball_x=x;}}repaint();}同开始命令原理,如果键入左键,横版向左移动20个单位(Rx为横板坐标),如果小球还在运动,当横板移到最左侧(Rx=0),不能再向左移动,则横板靠在最左侧(Rx=0),if(e.getKeyCode()==e.VK_RIGHT){Rx=Rx+20;if(bouncing){if(Rx+80>300){Rx=220;}}else{if(Rx+80>300){Rx=220;}else{x=x+20;ball.ball_x=x;}}repaint();}}向右移动同向左移动原理,因为定义界面横坐标最大值为300,横板长度80,故Rx=220时碰最右侧砖块设定:brick[0]=new Brick(0,60,50,20);brick[1]=new Brick(50,60,50,20);brick[2]=new Brick(100,60,50,20);……brick[16]=new Brick(200,160,50,20);brick[17]=new Brick(250,160,50,20);ball=new Ball(150,450,10,10);public void paint(Graphics g){super.paint(g);ball.rect.setLocation(x,y);if(bouncing){for(int i=0;i<=17;i++){if(brick[i].visible==true){switch(i){case 0 :g.setColor(Color.blue);break;case 1 :g.setColor(Color.cyan);break;case 2 :g.setColor(Color.gray);break;……case 17 :g.setColor(Color.yellow);break;}g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);}}g.setColor(Color.red);g.fillOval(x, y, 10, 10);g.setColor(Color.blue);g.fillRect(Rx,Ry,80,20);brick[0]=new Brick(0,60,50,20);设置砖块坐标,ball=new Ball(150,450,10,10);和小球的坐标if(brick[i].visible==true) 判断砖块存在,用switch语句,逐个对砖块填充颜色,最后四行代码是分别对小球和横板颜色坐标的定义小球的移动:try{Thread.currentThread().sleep(25);}catch(InterruptedException exception){System.err.println(exception.toString());}定义小球的速度,若发生错误,则执行catch语句,打印错误for(int i=0;i<=17;i++){if(ball.rect.intersects(brick[i].rect)&&brick[i].visible){brick[i].visible=false;yUp=!yUp;/}}当小球接触到砖块时,砖块不可见(消失)if(x+5>Rx&&x+5<Rx+80&&y+10>=Ry){yUp=false;xDx=(int)(Math.random()*5+2);yDy=(int)(Math.random()*5+2);}判断小球坐标和横板坐标,当小球落在横板坐标之内,小球反弹,小球横坐标和纵坐标都以一个随机值改变后运动if(xUp==true){x+=xDx;}else{x-=xDx;}if(yUp==true){y+=yDy;}else{y-=yDy;}判断小球横坐标如果在增加,小球横坐标=小球原横坐标+小球横坐标增量,否则小球横坐标=小球原横坐标-小球横坐标增量;纵坐标同理if(y<=0){y=0;ball.ball_y=y;yUp=true;xDx=(int)(Math.random()*5+2);yDy=(int)(Math.random()*5+2);}else if(y>=MAX_Y-15){yDy=(int)(Math.random()*5+2);//yUp=false;break;}判断小球到画面顶部(定义顶部的纵坐标为0),小球向下反弹,原理同小球和横板接触的反弹规则,否则,判断小球纵坐标是否大于MAX_Y-15(纵坐标最大值-15),反弹规则改变为横坐标不变,纵坐标随机改变if(x<=0){x=0;ball.ball_x=x;xUp=true;xDx=(int)(Math.random()*5+2);yDy=(int)(Math.random()*5+2);}else if(x>=MAX_X-10){x=MAX_X-10;ball.ball_x=x;xDx=(int)(Math.random()*5+2);yDy=(int)(Math.random()*5+2);xUp=false;}判断小球到画面最左侧(定义最左侧横坐标为0),向右侧反弹,反弹规则同小球和横板接触的反弹规则,或者小球到画面最右侧,向左反弹,反弹规则同上,(if(x>=MAX_X-10)判断小球是否到右边侧,小球的直径为10)int i;for(i=0;i<=17&&brick[i].visible==false;i++){}if(i==18){break;}如果所有砖块都不可见,则重新玩renew=true; //初始化bouncing=false;for(int i=0;i<=17;i++){brick[i].visible=true;}xUp=true;yUp=false;xDx=1;yDy=1;x=150;y=450;Rx=120;Ry=460; //重新开始,初始化,小球静止,所有砖块可见,小球在横坐标方向,可随横板移动而移动,纵坐标在未开时游戏前不能改变,定义小球横坐标和纵坐标增量都为1,小球初始位置坐标(150,450)横板初始位置坐标(120,460)[源程序]import java.awt.*;import javax.swing.*;import java.awt.event.*;import javax.swing.event.*;public class HitBrick extends JFrame implements KeyListener{ private BallThread greenBallThread;//控制小球的线程private boolean xUp,yUp,bouncing;private int x,y,xDx,yDy;//小球坐标,增量private final int MAX_X=300,MAX_Y=500;private boolean renew;private JLabel label;private int Rx,Ry;//横板坐标private Brick brick[]=new Brick[18];//砖块private Ball ball;//小球public HitBrick(){super("打砖块");Container pane=getContentPane();//设置空白面板容器label=new JLabel("按空格键开始"); //标签label.setHorizontalAlignment(JLabel.CENTER);//水平label.setVerticalAlignment(JLabel.BOTTOM);//垂直pane.add(label);//向面板里添加标签xUp=true;//横坐标可以移动yUp=false;//纵坐标不可以移动xDx=1;yDy=1;x=150;//小球坐标y=450;Rx=120;//横板坐标Ry=460;renew=true;bouncing=false;addKeyListener(this);//键盘监听器brick[0]=new Brick(0,60,50,20);//砖块坐标brick[1]=new Brick(50,60,50,20);brick[2]=new Brick(100,60,50,20);brick[3]=new Brick(150,60,50,20);brick[4]=new Brick(200,60,50,20);brick[5]=new Brick(250,60,50,20);brick[6]=new Brick(0,90,50,20);brick[7]=new Brick(50,110,50,20);brick[8]=new Brick(100,130,50,20);brick[9]=new Brick(150,130,50,20);brick[10]=new Brick(200,110,50,20);brick[11]=new Brick(250,90,50,20);brick[12]=new Brick(0,160,50,20);brick[13]=new Brick(50,160,50,20);brick[14]=new Brick(100,160,50,20);brick[15]=new Brick(150,160,50,20);brick[16]=new Brick(200,160,50,20);brick[17]=new Brick(250,160,50,20);ball=new Ball(150,450,10,10);//球的坐标setSize(MAX_X,MAX_Y);//窗口大小setResizable(false);setVisible( true );//可视化}public void keyPressed(KeyEvent e) {if (e.getKeyCode() ==e.VK_SPACE) {if(renew){greenBallThread=new BallThread(this);bouncing = true;greenBallThread.start();label.setVisible(false);}renew=false;}if(e.getKeyCode()==e.VK_LEFT){Rx=Rx-20;if(bouncing){if(Rx<0){Rx=0;}}else{if(Rx<0){Rx=0;}else{x=x-20;ball.ball_x=x;}}repaint();}if(e.getKeyCode()==e.VK_RIGHT){Rx=Rx+20;if(bouncing){if(Rx+80>300){Rx=220;}}else{if(Rx+80>300){Rx=220;}else{x=x+20;ball.ball_x=x;}}repaint();}}public void keyReleased (KeyEvent e) {} public void keyTyped (KeyEvent e){}public void paint(Graphics g){super.paint(g);ball.rect.setLocation(x,y);if(bouncing){for(int i=0;i<=17;i++){if(brick[i].visible==true){switch(i){case 0 :g.setColor(Color.blue);break;case 1 :g.setColor(Color.cyan);break;case 2 :g.setColor(Color.gray);break;case 3 :g.setColor(Color.green);break;case 4 :g.setColor(Color.magenta);break;case 5 :g.setColor(Color.yellow);break;case 6 :g.setColor(Color.white);break;case 7 :g.setColor(Color.black);break;case 8 :g.setColor(Color.orange);break;case 9 :g.setColor(Color.pink);break;case 10 :g.setColor(Color.darkGray);break;case 11 :g.setColor(Color.red);break;case 12 :g.setColor(Color.blue);break;case 13 :g.setColor(Color.cyan);break;case 14 :g.setColor(Color.gray);break;case 15 :g.setColor(Color.green);break;case 16 :g.setColor(Color.magenta);break;case 17 :g.setColor(Color.yellow);break;}g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);}}g.setColor(Color.red);g.fillOval(x, y, 10, 10);g.setColor(Color.blue);g.fillRect(Rx,Ry,80,20);}else{for(int i=0;i<=17;i++){switch(i){case 0 :g.setColor(Color.blue);break;case 1 :g.setColor(Color.cyan);break;case 2 :g.setColor(Color.gray);break;case 3 :g.setColor(Color.green);break;case 4 :g.setColor(Color.magenta);break;case 5 :g.setColor(Color.yellow);break;case 6 :g.setColor(Color.white);break;case 7 :g.setColor(Color.black);break;case 8 :g.setColor(Color.orange);break;case 9 :g.setColor(Color.pink);break;case 10 :g.setColor(Color.darkGray);break;case 11 :g.setColor(Color.red);break;case 12 :g.setColor(Color.blue);break;case 13 :g.setColor(Color.cyan);break;case 14 :g.setColor(Color.gray);break;case 15 :g.setColor(Color.green);break;case 16 :g.setColor(Color.magenta);break;case 17 :g.setColor(Color.yellow);break;}g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);}g.setColor(Color.red);g.fillOval(x, y, 10, 10);g.setColor(Color.blue);g.fillRect(Rx, Ry, 80, 20);}}public void move(){while(true){try{Thread.currentThread().sleep(25);}catch(InterruptedException exception){System.err.println(exception.toString());}for(int i=0;i<=17;i++){if(ball.rect.intersects(brick[i].rect)&&brick[i].visible){brick[i].visible=false;yUp=!yUp;//打到球不可见}}if(x+5>Rx&&x+5<Rx+80&&y+10>=Ry){yUp=false;xDx=(int)(Math.random()*5+2);//小球坐标增量yDy=(int)(Math.random()*5+2);}if(xUp==true){x+=xDx;//小球左右移动坐标改变}else{x-=xDx;}if(yUp==true){y+=yDy;}else{y-=yDy;}if(y<=0){y=0;ball.ball_y=y;yUp=true;xDx=(int)(Math.random()*5+2);yDy=(int)(Math.random()*5+2);}else if(y>=MAX_Y-15){yDy=(int)(Math.random()*5+2);//yUp=false;break;}if(x<=0){x=0;ball.ball_x=x;xUp=true;xDx=(int)(Math.random()*5+2);yDy=(int)(Math.random()*5+2);}else if(x>=MAX_X-10){x=MAX_X-10;ball.ball_x=x;xDx=(int)(Math.random()*5+2);yDy=(int)(Math.random()*5+2);xUp=false;}ball.rect.setLocation(ball.ball_x,ball.ball_y);repaint();int i; //如果所有砖块都不可见for(i=0;i<=17&&brick[i].visible==false;i++){ //则重新玩}if(i==18){break;} //}renew=true; //初始化bouncing=false;for(int i=0;i<=17;i++){brick[i].visible=true;}xUp=true;yUp=false;xDx=1;yDy=1;x=150;y=450;Rx=120;Ry=460; //repaint();repaint();label.setVisible(true);}public static void main(String[] args) {HitBrick mar=new HitBrick();}}class BallThread extends Thread{private HitBrick m;BallThread(HitBrick a){//super();m=a;}public void run(){m.move();m.repaint();}}class Brick{Rectangle rect=null; //长方形对象,砖块按钮的位置和宽高int brick_x,brick_y;//按扭的左上角坐标int brick_width,brick_height; //按扭的宽和高boolean visible;public Brick(int x,int y,int w,int h){brick_x=x;brick_y=y;brick_width=w;brick_height=h;visible=true;rect=new Rectangle(x,y,w,h); //创建长方形对象---砖块按钮的位置和宽高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java程序课程设计任务书一、主要内容打砖块游戏是一种动作电子游戏的名称。

玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。

球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。

二、具体要求通过图形用户界面(Graphics User Interface,GUI)和线程,使用户和程序之间可以方便地进行交互。

运用Swing组件,编写小应用程序游戏,加深对Java 语言的理解,深入地了解图形用户界面的设计,更加熟练地运用编程软件。

功能要求:(1)游戏运行需键盘的操作;(2)游戏可统计分数;(3)球落到底下会失去一颗,按ENTER可重新开始。

开发工具:JCreater软件;开发技术: J2ME。

三、进度安排12月28日:课程设计选题,查找参考资料12月29日:完成打砖块游戏程序设计分析12月30日 ~ 1月3日:完成程序代码的编写1月4日 ~ 1月5日:游戏测试与完善1月6日 ~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] (美)埃克尔着陈昊鹏,饶若楠等译. Java编程思想[J]. 机械工业出版社,2005[2](美)Gary 着张珑刘雅文译. Java编程原理[J]. 清华大学出版社,2004[3](美)Michael Morrison着徐刚,于健,薛雷译. 游戏编程入门[J]. 人民邮电出版社,[4](美)Wendy Stahler着冯宝坤,曹英译. 游戏编程中的数理应用[J]. 红旗出版社,2005[5](美)克罗夫特(David Wallace Croft)着彭晖译. Java游戏高级编程[J].清华大学出版社,2005[6](美)David Brackeen着邱仲潘译. Java游戏编程[J]. 科学出版社,2004[7] 聂庆亮编着. Java应用开发指南[J]. 清华大学出版社,2010[8] 耿祥义,张跃平编着. Java面向对象程序设计[J]. 清华大学出版社,2010[9] 杨绍方编着. Java编程实用技术与案例[J]. 清华大学出版社,[10] 明日科技编着. Java编程全能词典[J]. 电子工业出版社,2010摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。

Java游戏的开发为满足人们娱乐所需而设计。

本游戏为打砖块游戏,是基于Java的图形用户界面而开发的,可以放松心情的小游戏。

游戏从系统操作简便、界面友好、灵活、上手即会的基本要求出发,完成整款游戏的开发。

游戏更设置了暂停、计分、音乐、速度,用户信息保存等功能,可以根据自己的爱好,挑战更高难度,为用户带来愉悦的体验。

本课程设计报告介绍了游戏的构想,分析,开发,实现的过程。

论述了游戏的功能开发,设计构思。

给出了游戏的设计步骤,游戏系统关键的设计思想;在游戏系统实现章节给出了部分功能流程和相关代码。

关键词:游戏,打砖块目录JAVA程序课程设计任务书 (II)摘要 (IV)目录 (V)第1章引言 (1)背景 (1)课程设计内容 (1)任务分工 (2)第二章弹砖块小游戏应用程序 (3)弹砖块小游戏应用程序概述 (3)打砖块小游戏系统任务及目的 (3)主要特色系统介绍 (3)本章小结 (4)第3章打砖块游戏系统的设计 (5)系统需求分析 (5)系统开发及运行环境 (5)系统主要功能要求 (5)打砖块系统总体结构 (6)系统数据流图 (9)本章小结 (9)第4章系统数据库设计 (10)数据库设计过程 (10)需求分析 (10)功能实现 (10)本章小结 (11)第5章系统的具体实现 (12)界面设计 (12)用户登录界面图 (12)游戏主界面 (13)程序设计及调试运行 (19)自动计时 (19)在JPanel中画图 (20)用户注册登录系统 (21)游戏结果的存储 (22)本章小结 (23)第6章结束语 (24)致谢 (25)参考文献 (26)附录源代码 (27)第1章引言背景游戏是全球最大的娱乐经济项目之一,已经被命名为“第九艺术”。

而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,已成为了一系列专门的岗位。

面对游戏产业如此巨大的市场空间,国内各大城市纷纷加大了这方面的人才培养,中国的游戏人才培训已随着游戏行业的总体发展开始逐步迈入了正轨。

虽然说中国的游戏行业开始逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏又直接制约着行业的发展,这就更加严格了对社会培训机构的稳定性和正规性的要求。

在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。

所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,来满足社会对游戏人才的需求。

课程设计内容打砖块游戏是一种动作电子游戏的名称。

玩家操作一根萤幕上水平的弹板,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。

球碰到砖块、弹板与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。

游戏的功能包含以下内容:(1)基本的游戏操作用户可以通过鼠标或者键盘来操作弹板,尽量让弹球不要掉下底下。

开始按钮和暂停按钮可以控制游戏的进行。

(2)宝物获得功能用户在游戏过程中,可能获得相关的宝物,可以使弹板增长一部分。

(3)速度设置功能本游戏有5个速度设置,可以根据用户的需要,调节到用户想要的速度进行游戏。

(4)音乐设置功能用户可以根据自己的喜好,选择自己喜欢的音乐,或者是关掉它。

(5)用户注册登录功能每个用户在游戏开始时都要输入用户的信息注册,登录,并记录。

当用户退出游戏以后,系统将记录用户的游戏信息。

(6)计分,记时功能用户在游戏的过程中,系统将记录游戏的成绩,并保存在文件中,用户退出游戏后也可以查询成绩。

任务分工第二章弹砖块小游戏应用程序弹砖块小游戏应用程序概述此程序设计是一个小游戏(弹砖块)的实现,主要运用了用户图形界面,程序接口和基本函数绘制来实现,事件监听(包括鼠标事件,键盘事件,响应时间)也是这个程序的特色。

此程序用到了图片的引用,砖块、弹板应用了函数绘制和图片引用,弹球的设计外且安全是应用函数绘制。

游戏还利用JAVA Applet实现了播放声音。

再加入复选框,按钮,标签等来实现本游戏用户界面布局。

总之,本游戏在用户界面的可操作性、游戏的美观度、计分计时存储结果方便都基本完善,有一定的可玩性。

打砖块小游戏系统任务及目的此小程序是为群众闲暇消遣之用,玩家在进入游戏后输入自己的大名,按游戏规则用弹球打掉弹板上的全部砖块,获得相应的分数,进入下一关,知道全部过关,游戏结束后可记录玩家分数及排行榜名次进入游戏界面,一个文本框可以选择是否记录游戏这名字,接着是“开始”、“暂停”、“重新开始”按钮以及四个复选框分别控制背景音乐、速度、模型和关卡,还有四标签记录时间、生命分数和排行榜数据。

主要特色系统介绍游戏增加了背景音乐以及碰撞音乐的设置,并用图片代替了纯粹用函数构造出的砖块,使玩家在使用此程序时更加能体验到乐趣。

自主选关、模式选择和速度选择给了玩家更多的自主机动性,使得玩家可以根据自己的意愿来设定游戏难度,排行榜功能也是特色之一,玩家可以根据排行榜来了解自己玩的如何,可以有个相对的比较。

本章小结虽然游戏在功能和界面上不能算的上很棒,但是麻雀虽小,五脏俱全,游戏具备了弹砖块这个经典游戏锁应该具有的基本雏形。

通过这一章,我们对这个游戏应该有了比较宏观的了解,我们将在这一基础上探究游戏更完美的改变。

第3章打砖块游戏系统的设计这一章是打砖块游戏系统的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。

系统需求分析打砖块的设计目标为:(1)实现打砖块游戏功能,使用背景音乐,可用键盘或者鼠标控制挡板,并对游戏时间,游戏分数进行记录并保存成绩到文本,列出成绩排行榜。

(2)实现游戏难度和游戏模型的选择,通过本关后可以选择进入下一关。

(3)得到不同宝物可以实现多种游戏功能,加强游戏可玩性。

系统开发及运行环境硬件平台:CPU:INTEL-I5。

内存:1024MB以上。

软件平台:操作系统:Windows XP。

数据库:TXT文档。

开发工具包:JDK 。

分辨率:最佳效果1024×768像素。

系统主要功能要求本系统为了实现游戏打砖块。

本系统主要实现如下功能:系统界面美观大方舒适。

实现游戏一些基础信息的保存和读取。

画面流畅,具有可玩性没有较大的游戏BUG。

显示游戏者的游戏时间和积分。

存储玩家的积分。

实现多种难度的选择。

实现多种砖块的排列模型。

多种宝物可以实现不同的功能玩家可以输入名称存入数据库。

系统最大限度地实现了易维护性和易操作性。

系统运行稳定、安全可靠。

实现用户的注册及注册信息的保存打砖块系统总体结构打砖块游戏是基于基本的软件和普通硬件基础上的传统优秀游戏,一个游戏应该包括以下几大功能,如图所示打砖块系统基础游戏功能数据保存查询统计图系统功能结构图各功能模块实现的功能为:游戏管理模块:实现基本的打砖块操作并实现游戏模型调整和游戏难度调整。

查询统计:让玩家注册用户并保存它的游戏数据。

实现游戏分数的查询。

游戏管理模块图如图所示。

图游戏管理功能模块图查询统计模块图如图所示图查询统计功能模块图系统数据流图游戏信息的流向,即系统数据流图如图所示。

图系统数据流图本章小结本章是打砖块游戏的具体设计过程,有具体的需求分析、系统功能模块、系统数据流图。

这里我们开始接触JAVA程序设计的最初步骤,也是很重要的一步。

第4章系统数据库设计本章是打砖块的数据库设计,有了数据库,就可以对游戏的成绩,玩家姓名进行保存,提高游戏的可玩性、竞争性数据库设计过程数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库应用系统,使之能有效的存储数据,满足各种用户的应用需求。

数据库设计方法是研究数据库及其应用系统的技术,是数据库在应用领域中的主要的研究课题。

需求分析打砖块的游戏存储需要两部分:一是游戏姓名注册以及存储,二是游戏分数存储功能实现运用较为简单的java程序代码,先需要注册用户名,效果如图将游戏数据存入一个名为的文本文档。

实现效果如下图图图游戏信息的存储本章小结本章是打砖块游戏系统的数据库开发。

采用的是TXT文本。

第5章系统的具体实现界面是系统和玩家之间最直接的交互界面,界面的友好性体现了程序设计的质量,界面是否便捷易懂也是程序所基本的要求。

相关文档
最新文档