JAVA课设华容道总的
- 格式:pdf
- 大小:364.74 KB
- 文档页数:13
数字华容道课程设计一、课程目标知识目标:1. 让学生掌握数字华容道的基本规则和玩法,理解其背后的数理逻辑。
2. 培养学生对数字排列组合的兴趣,提高数学思维能力和解决问题的策略。
3. 让学生通过数字华容道,熟练掌握加减乘除基本运算,提高运算速度和准确性。
技能目标:1. 培养学生独立思考、分析问题和解决问题的能力。
2. 培养学生的观察力、注意力、手眼协调能力和空间想象力。
3. 提高学生的团队协作能力和沟通能力,通过合作完成更高难度的数字华容道挑战。
情感态度价值观目标:1. 培养学生对数学的兴趣和热情,激发学生学习数学的积极性。
2. 培养学生面对困难时勇于挑战、坚持不懈的精神。
3. 培养学生尊重规则、公平竞争的价值观,以及在团队中互相尊重、协作共进的团队精神。
课程性质:本课程以趣味数学游戏为载体,结合数学知识和技能训练,注重培养学生的数学思维和解决问题的能力。
学生特点:本课程针对的小学高年级学生,他们在数学基础知识、逻辑思维和动手操作能力方面有较好的基础,但需要进一步激发学习兴趣和提高解决问题的策略。
教学要求:教师需充分了解学生的特点,运用生动有趣的教学方法,引导学生积极参与,注重个体差异,鼓励学生自主探究和合作学习,确保每个学生都能在课程中取得进步。
通过课程的学习,使学生达到以上设定的具体学习成果,为后续教学设计和评估提供依据。
二、教学内容本课程以《数学》教材中逻辑思维与策略游戏的相关章节为基础,结合数字华容道游戏,组织以下教学内容:1. 数字华容道的基本规则与玩法介绍。
2. 数字华容道中涉及的数学知识,如整数加减乘除、排列组合等。
3. 数字华容道解题策略与技巧,如观察规律、逐步推理、逆向思维等。
4. 数字华容道变式与拓展,提高学生思维的灵活性和创新意识。
教学大纲安排如下:第一课时:数字华容道基本规则与玩法介绍,引导学生了解游戏背景,激发学习兴趣。
第二课时:数字华容道中涉及的数学知识,通过实例讲解,让学生掌握相关数学概念。
java课程设计华容道一、课程目标知识目标:1. 理解华容道游戏的规则和基本算法;2. 学会运用Java编程语言实现华容道游戏的逻辑设计和界面展示;3. 掌握面向对象编程思想,运用类和对象对华容道游戏进行模块化设计;4. 了解Java异常处理和输入输出流的使用。
技能目标:1. 能够运用Java编写华容道游戏代码,实现游戏的基本功能;2. 培养学生分析问题、解决问题的能力,通过设计华容道游戏提升编程实践技能;3. 提高学生团队协作和沟通能力,通过分组讨论和共同完成游戏设计。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养自主学习、积极探索的精神;2. 培养学生面对困难时保持坚持不懈、勇于挑战的态度;3. 通过团队合作,培养学生尊重他人意见、互帮互助的良好品质。
分析课程性质、学生特点和教学要求,将目标分解为以下具体学习成果:1. 学生能够独立完成华容道游戏的代码编写,实现游戏的基本功能;2. 学生能够在团队协作中发挥自己的优势,共同完成华容道游戏的设计;3. 学生能够通过本课程的学习,提高编程实践能力和逻辑思维能力,对计算机编程产生浓厚兴趣。
二、教学内容根据课程目标,教学内容分为以下五个部分:1. 华容道游戏规则及算法原理- 介绍华容道游戏的基本规则和目标;- 分析华容道游戏的核心算法和解决方案。
2. Java面向对象编程基础- 复习Java中的类与对象、封装、继承、多态等概念;- 实例讲解如何运用面向对象思想进行华容道游戏设计。
3. Java编程实践- 指导学生编写华容道游戏的各个模块,如游戏界面、游戏逻辑、角色控制等;- 引导学生掌握异常处理、输入输出流等Java技术。
4. 团队协作与沟通- 分组进行华容道游戏设计,培养学生团队协作能力;- 教学过程中强调沟通技巧,提高学生表达和倾听能力。
5. 教学评估与总结- 制定评估标准,检查学生完成的游戏项目;- 对学生进行评价,总结课程收获和不足。
java实现华容道课程设计一、课程目标知识目标:1. 学生能理解华容道游戏的基本规则,掌握其数学模型;2. 学生能运用Java编程语言实现华容道的游戏逻辑,包括角色移动、胜负判定等;3. 学生能运用面向对象编程思想对华容道游戏进行模块化设计,包括类的定义、方法的实现等。
技能目标:1. 学生能运用所学知识独立编写Java程序,实现华容道游戏的玩法;2. 学生能通过调试和优化代码,提高程序的执行效率和稳定性;3. 学生能运用问题分析、解决方案设计等技能,解决实际编程问题。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣,激发创新精神和实践能力;2. 学生在合作学习中培养团队协作意识和沟通能力;3. 学生通过华容道游戏的学习,了解我国传统文化,增强文化自信。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程属于Java编程的实践应用,通过华容道游戏的实现,让学生掌握编程技巧,提高解决问题的能力。
2. 学生特点:学生具备一定的Java基础,对编程有一定兴趣,但实际操作能力有待提高。
3. 教学要求:教师应以学生为中心,注重实践操作,引导学生主动探索,培养其编程思维和实际应用能力。
二、教学内容1. 华容道游戏规则及数学模型介绍- 游戏规则:介绍华容道的基本玩法、胜负条件等;- 数学模型:分析华容道涉及的数学问题,如排列组合、路径规划等。
2. Java编程基础知识回顾- 数据类型、变量、运算符;- 控制结构:顺序结构、分支结构、循环结构;- 数组的使用。
3. 面向对象编程思想- 类的定义:属性、方法、构造方法;- 封装、继承、多态;- 抽象类和接口。
4. 华容道游戏编程实现- 游戏界面设计:使用Java Swing或JavaFX设计游戏界面;- 游戏逻辑实现:角色移动、胜负判定等;- 模块化设计:类的设计与实现。
5. 调试与优化- 代码调试技巧;- 性能优化:算法优化、资源管理优化等。
6. 教学进度安排- 第一课时:华容道游戏规则及数学模型介绍;- 第二课时:Java编程基础知识回顾;- 第三课时:面向对象编程思想;- 第四课时:华容道游戏编程实现(上);- 第五课时:华容道游戏编程实现(下);- 第六课时:调试与优化。
数字华容道问题的设计与实现数字华容道问题的设计与实现《数字华容道问题的设计与实现》实验报告班级:计本四班学号: 020386 姓名:刘宝同一、问题描述重排九宫是一个古老的单人智力游戏。
据说重排九宫起源于中国古时由三国演义故事“关羽义释曹操”而设计的智力玩具“华容道”,后来流传到欧洲,将人物变成数字。
原始的重排九宫问题是这样的:将数字1~8 按照任意次序排在3×3 的方格阵列中,留下一个空格。
与空格相邻的数字,允许从上,下,左,右方向移动到空格中。
游戏的最终目标是经过合法移动,将数字1~8 按行排好序。
在一般情况下,n2-1 谜问题是将数字1~n2-1 按照任意次序排在n×n 的方格阵列中,留下一个空格。
允许与空格相邻的数字从上,下,左,右4个方向移动到空格中。
游戏的最终目标是经过合法移动,将初始状态变换到目标状态。
n2-1谜问题的目标状态是将数字1~n2-1 按从小到大的次序排列,最后一个位置为空格。
二、问题求解分析编程任务:对于给定的n×n 方格阵列中数字 1~n2-1 初始排列,编程计算将初始排列经过合法移动变换为目标状态最少移动次数。
数据输入:由文件 input.txt 给出输入数据。
文件的第 1 行有 1 个正整数 n。
以下的 n 行是n×n 方格阵列的中数字 1~n2-1 的初始排列,每行有 n 个数字表示该行方格中的数字, 0 表示空格。
结果输出:将计算出的最少移动次数和相应的移动序列输出到文件output.txt。
第1 行是最少移动次数。
从第2 行开始,依次输出移动序列。
三、源程序关键代码#include#include#include#define Overflow 1#define N 3int goal[N][N]={1,2,3,8,0,4,7,6,5}; int zero[2],NodeQTY=0;int *z=zero;//记录0的位置,zero[0]:r行;zero[1]:c列typedef int Piece;struct Chessboard{//棋盘信息Piece pos[N][N];//记录每个数码a的位置r行c列int d,f,move;//d:深度;f:启发函数值;move:父节点移动到该节点的方式};struct LNode{Chessboard board;LNode *parent,*next;bool flag;};typedef LNode* List;int* Findzero(LNode* &Node){int i,j,zr[2];int *z=zr;for(i=0;i<n;i++){< p="">for(j=0;j<n;j++){< p="">if(Node->board.pos[i][j]==0){zr[0]=i+1;zr[1]=j+1;break;}}}return z;}int Wrong(LNode *Node){int w=0,i,j;for(i=0;i<n;i++){< p="">for(j=0;j<n;j++){< p="">if(Node->board.pos[i][j]!=goal[i][j]&&Nod e->board.pos[i][j]!=0) w++;}}return w;}int pick(LNode *Node){int w=0,i,j,ii,jj;for(i=0;i<n;i++){< p="">for(j=0;j<n;j++){< p="">if(Node->board.pos[i][j]!=goal[i][j]&&Nod e->board.pos[i][j]!=0){ for(ii=0;ii<n;ii++)< p="">for(jj=0;jj<n;jj++)< p="">if(Node->board.pos[i][j]==goal[ii][jj]){w=w+abs(ii-i)+abs(jj-j);break;}}}}return w;}LNode* extend(LNode *Node,int depth,int zero[2],int moveflag,int Choose){LNode* NewNode=new LNode;for(int i=0;i<n;i++){< p="">for(int j=0;j<n;j++){< p="">NewNode->board.pos[i][j]=Node->board.pos[i][j];}}switch(moveflag){case 1: //向左移,不能出界:zero[1]>=2NewNode->board.pos[zero[0]-1][zero[1]-1]=NewNode->board.pos[zero[0]-1][zero[1]-2];NewNode->board.pos[zero[0]-1][zero[1]-2]=0;break;case 2: //向右移,不能出界:zero[1]<=2NewNode->board.pos[zero[0]-1][zero[1]-1]=NewNode->board.pos[zero[0]-1][zero[1]];NewNode->board.pos[zero[0]-1][zero[1]]=0;break;case 3: //向上移,不能出界:zero[0]>=2NewNode->board.pos[zero[0]-1][zero[1]-1]=NewNode- >board.pos[zero[0]-2][zero[1]-1]; NewNode->board.pos[zero[0]-2][zero[1]-1]=0; break;case 4: //向下移,不能出界:zero[0]<=2 NewNode->board.pos[zero[0]-1][zero[1]-1]=NewNode- >board.pos[zero[0]][zero[1]-1];NewNode->board.pos[zero[0]][zero[1]-1]=0;break;}NewNode->board.d=depth+1;switch(Choose){case 1:NewNode->board.f=NewNode->board.d+Wrong(NewNode);bre ak;case 2:NewNode->board.f=NewNode->board.d+pick(NewNode);break;}NewNode->board.move=moveflag;NewNode->parent=Node;NodeQTY++;return NewNode;}void InitList(LNode* &Open,LNode* &Close) {Open=(List)malloc(sizeof(L Node));Close=(List)malloc(sizeof(L Node));if(!Open&&!Close)exit(Overflow);Open->next=NULL;Close->next=NULL;}int ListInsert(List &L,LNode* NewNode){List p=L;while(p->next){p=p->next;}NewNode->next=p->next;p->next=NewNode;return true;}LNode* Getminf(List &L){List p=L,q=L->next,r=L,min;min=q;//p,q寻找f最小值的指针,r指向表L中min前一个元素if(!q)return NULL;while(q){if(min->board.f>q->board.f){r=p;min=q;}p=q;q=q->next;}r->next=min->next;min->next=NULL;return min;}int main(){int i,j,choose;List Open,Close;LNode *Best,*current;LNode *Start=new LNode;printf("\t\t\t八数码问题求解\n");printf("\n请输入初始状态:");for(i=0;i<n;i++){< p="">for(j=0;j<n;j++){< p="">scanf("%d",&(Start->board.pos[i][j]));}}printf("(注:The flag of movement--1:左移;2:右移;3:上移;4:下移)\n");printf("初始棋盘状态:\n");for(i=0;i<n;i++){< p="">for(j=0;j<n;j++){< p="">printf("|%d",Start->board.pos[i][j]);}printf("|\n");}InitList(Open,Close);printf("请选择(1:A算法;2:A*算法):");scanf("%d",&choose);Start->board.d=0;switch(choose){case 1:Start->board.f=Start->board.d+Wrong(Start);break;case 2:Start->board.f=Start->board.d+pick(Start);break;} // Start->board.f=0+Wrong(Start);Start->board.move=0;Start->parent=NULL;Start->next=NULL;Start->flag=1;ListInsert(Open,Start);//将S加入到Open表中while(Open->next){Best=Getminf(Open);ListInsert(Close,Best);if(!(Best->board.f-Best->board.d)){printf("$$$******有解!******$$$\n");break;}z=Findzero(Best);zero[0]=*(z+0);zero[1]=*(z +1);if(zero[1]>=N-1&&Best->board.move!=2)ListInsert(Open,extend(Bes t,Best->board.d,zero,1,choose)); if(zero[1]<=N-1&&Best->board.move!=1)ListInsert(Open,extend(Bes t,Best->board.d,zero,2,choose)); if(zero[0]>=N-1&&Best->board.move!=4)ListInsert(Open,extend(Bes t,Best->board.d,zero,3,choose));if(zero[0]<=N-1&&Best->board.move!=3)ListInsert(Open,extend(Bes t,Best->board.d,zero,4,choose));}printf("本算法搜索图中总共扩展的节点数为:%d\n",NodeQTY);printf("\t最佳路径如下所示:\n");if(Open->next){while(Best->parent){Best->flag=1;Best=Best->parent;}List p=Close->next,q=Close->next;if(p==Start) q=p->next;else exit(1);int Step=0;while(p&&q)//在Close表中依标记找到路径{if(q->flag==1&&q->parent==p){printf("Step %d:0 move as the %d-flag of movement.\n",++Step,q->board.move);for(i=0;i<n;i++){< p="">for(j=0;j<n;j++){< p="">printf("|%d",q->board.pos[i][j]);}printf("|\n");}p=q;//记住父节点}q=q->next;}printf("到达目标状态!\n");}else printf("该问题无法求解!\n");}四、总结经过对这个游戏的编程和设计,进一步巩固了所学的专业课知识,在查阅了有关数字华容道问题编程的相关知识的同时,也进一步了解编程的方法,并学到了很多编程的技巧和经验。
命题方式:单独命题佛山科学技术学院2013—2014学年第二学期《可视化编程技术》课程期末考试试题A专业、班级:12教技2班姓名:何颖康学号:2012914209 成绩:佛山科学技术学院《可视化编程技术》课程设计报告JA V A小游戏“华容道”设计学生姓名:***学号:**********年级专业:12级教育技术学2班指导老师:***学院:教育科学学院广东★佛山提交日期:2014年6月摘要:本程序根据手机游戏“智力大爆炸”为原版,加入历史元素,将娱乐、学习和思考集于一体。
程序执行后,点击相应的人物,然后按上下左右键可以移动。
点击重新开始按钮,可以将各个人物的位置重置。
如果目的地的面积能够容得下当前要移动的人物,则认为可以移动。
当曹操移动到“曹操到达该位置”的位置的时候,认为程序结束。
关键字:java小游戏,华容道,益智,历史元素,曹操移动前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。
文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。
Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。
Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。
二年级数学《华容道》教学设计各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢二年级数学《华容道》教学设计一、教学内容:“华容道”是滑块类游戏中的经典。
这是有一个带二十个小方格的棋盘,代表华容道。
棋盘下方有一个两方格边长的出口,是供曹操逃走的。
棋盘上共摆有十个大小不一样的棋子,它们分别代表曹操、张飞、赵云、马超、黄忠和关羽,还有四个卒。
棋盘上仅有两个小方格空着,玩法就是通过这两个空格移动棋子,用最少的步数把曹操移出华容道。
二、设计意图:立足“华容道"游戏,通过引导学生移动板块来释放“曹操”的全过程,使学生乐于动手、勤于思考,从而培养了学生自主有序思考的能力,达到锻炼学生逻辑思维能力和推理能力的目的。
“华容道"游戏是我国最经典的游戏之一,有着丰富的故事背景和人文理念,学生在玩游戏中能充分感受古人的聪明才智,激发爱国热情.三、学情背景:英国教育家沛·西能在《教育原理》中说,“充分的游戏机会对于儿童健全的和愉快的发展无疑是必要的……”.玩是孩子的天性,“寓教于玩”可以极大限度的激发学生学习的兴趣,发展学生的思维,开发学生的智力。
班内现有学生40人,仅有2名学生简单了解“华容道”这款游戏,占学生总数的5%;其他95%的学生从未听说过这款游戏。
这样一个小班化的教室,便于开展各类学生喜闻乐见的游戏活动,而“华容道"游戏又是我国四大经典游戏之一,因此,非常有必要引导我们的学生了解和学习这款游戏,来传承我国经典游戏。
在提倡“轻负高质”“凸显乐学”的今天,借助“华容道”游戏,有利于让学生从单调、繁复的课业学习中解放出来,达到快乐学习的目的。
四、教学目标:1.使学生通过盘上的两个空格,逐步移动各个板块,直至把“曹操”移动到下面的出口,从而学会玩”华容道”的游戏.2.在探索如何释放“曹操”的复杂过程中,培养学生的战略、战术技巧。
3。
通过玩华容道游戏,训练学生的逻辑思维能力和推理能力.4。
华容道游戏讲解华容道游戏讲解J2M游戏开发实E例解讲uAtho: r滴蔚蓝一 | 色Dat:e 2070-1-060 |Vi w:e9 676 | 开技术发程序设计| Dig-:g0 跳JM2E游戏发实开例解讲页面 1 共 2在天上网闲逛,现一篇讲发用解delphi实华现容游戏道的章,颇受启文.发是于,产生了华容道将游移植戏手机到中去的动冲.在现手机游琳戏琅满目不一,足,而华道容实的版本现也多很.巧不久前笔者正J对2ME下一了功番,正想借这个夫会机试牛刀。
选用J小2M的E原因还有个就是目一前aJa开发v行大到其,线无殖增务业猛迅发,展J2M 的E应日渐用跃起活来,希也我望这篇文章能的为J2ME知够识的及普和发团队开的壮大波助推。
澜由于长期受SIO范的规响,影次小试牛这刀也打算我遵照件工软的程要求,并采取布瀑的式发开式来模划项目,规希望借此机会向也位没有各会机参正与项式目开的读发介绍者一软件开发下的程。
流这我们里先义项定目的人组体员(其制实只我一有个人:)技术调研、需求析、概分要计设、细详计、设编、测试码均笔者一有担任人美工这;里我了个捷找径,盗网上用成现图的,片后然用ADCeS把e它BM由转换PP成NG格式我出于讲(座的目,未做商的业应,应该用算侵权吧);不于发至布工作由,于少缺O AT务器服此项工作不,做(是我会但介这绍如何步做)。
接来下,我们规划一项目下实现时的间表,我以个人经验设想如下,:技调术研用天2(这部解决分项的目可性和行大重技术问题时间会,长些一,需)分求用半析天(竟有现毕的成东东可以照参只要理清,思路行了,况就且有很多还前以过的设计模用和写式的好代码,)概要计设用再天(半有需求了概要,只够不照是抓方),药详细计设用2要天(这步要把一所有的问想题楚清还,尽可能要准的描述出确)来,码用编2(其实1天天够了就,技术经已不问题,是多计划出一天应来付突发事件)测试,用天2(试测应至该占少全部目的项分之四,一过这个不项只目是个D一eom,也简单了太)发布也要用,上半天(管尽我不们去实际布发它,但还是要花点间搞时楚应该清如何做),后最是就项总目和结庆功开会(时间待)。
目录一、课设任务及要求 (1)二、需求分析 (2)三、设计思路 (3)四、详细设计 (5)五、运行调试与分析讨论 (9)六、设计体会与小结 (14)七、参考文献 (15)附录 (16)中文摘要Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。
用Java实现的HotJava浏览器,显示了Java 的魅力:跨平台、动感的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。
另一方面,Java技术也不断更新。
Java平台由Java虚拟机和Java 应用编程接口构成。
Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。
现在Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以只编译一次,就可以在各种系统中运行。
Java 分为三个体系J2SE,J2EE,J2ME。
说起计算器,值得我们骄傲的是,最早的计算工具的诞生地是中国。
在17世纪初,西方国家的计算工具才有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,进而成为了现代社会应用广泛的计算工具。
关键词:java Java平台计算器一、课设任务及要求1.课设任务这次课程设计选择的题目为设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算。
这次课程设计的基本要求为设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算,且有小数点、正负号、求倒数、退格和清零功能。
拓展功能根据自己的能力添加。
JAVA小游戏“华容道”设计报告文档1490004班第六组组员:刘盈、杨山峰、杨攸寒、邱鹏、何铖、张山峰、唐柏涛摘要:我小组根据历史“曹操败走华容道”,将娱乐、学习和思考集于一体。
从中,我们学到开发中的愈多经验和技巧,程序编程思想有了一定的提高。
程序主要练习使用布局管理器设计一个华容道游戏界面,并使用监听事件实现按钮的移动。
程序执行后,点击相应的人物,然后按上下左右键可以移动。
点击重新开始按钮,可以将各个人物的位置重置。
如果目的地的面积能够容得下当前要移动的人物,则认为可以移动。
当曹操移动到“曹操到达该位置”的位置的时候,认为程序结束。
一、设计任务及要求程序主要练习使用布局管理器设计一个华容道游戏界面,并练习使用事件监听器,鼠标事件、键盘事件和焦点事件,实现按钮的移动。
通过运用不同的类,使用户掌握Windows下程序的消息传递的原理。
通过焦点移动的响应和用户动作的响应,从而实现了人机交互。
二、需求分析众所周知,良好的用户体验是软件开发者必须考虑的一个范畴。
而用户对某个新的事物作出评价,大多时候是通过第一眼的感觉来判定。
因此 设计一个外观引人的界面是一个必须的工作。
为实现界面上模拟网络版华容道游戏,我尽量站在用户的角度设计当前游戏界面。
逼真的布局,合理的“重新开始”、“退出游戏”按钮,给人乍眼一亮的视觉冲击。
而良好的功能是软件真正使人满意的决定因素。
该游戏实现的主要功能有:重新开始、退出游戏、鼠标监听用户动作、鼠标监听用户行为,主要功能的用例描述如下:1. 重新开始用户可以根据游戏的需要,单击“重新开始”按钮,当前游戏界面就消失,并且新的游戏界面窗口弹出。
每次弹出的新窗口布局相同。
2. 退出游戏用户可以选择点击退出游戏窗口,正常退出游戏。
退出游戏后,无新的窗口出现。
3. 鼠标监听用户动作用户可以使用鼠标,点击游戏界面中的人物按钮,按钮会根据情况正常、准确地对用户的点击行为作出响应。
4. 键盘监听用户行为当用户使用鼠标点击完可移动的人物按钮后,可以使用键盘的“↓”等方向键对当前按钮行为进行控制。
一、课程设计任务及要求1本程序主要练习使用布局管理器设计一个华容道游戏界面,并练习使用事件监听器(鼠标事件、键盘事件和焦点事件)实现按钮的移动。
2编写一个按钮的子类,使用该子类创建的对象代表华容道中的人物。
通过焦点事件控制人物颜色,当人物获得焦点时颜色为红色,当失去焦点时颜色为黄色。
3通过键盘事件和鼠标事件来实现曹操、关羽等人物的移动。
当人物上发生鼠标事件或键盘事件时,如果鼠标指针的位置是在人物的下方(也就是组件的下半部分)或按下键盘的“↓“键,该人物向下移动。
向左、向右和向上的移动原理类似。
4点击“重新开始”可以使各个按钮复位,重新开始游戏。
二、需求分析要满足的容道游戏的基本操作:1.各人物按钮按相应的顺序和大小排列,按钮上标注人物名字,界面美观。
2.通过焦点事件控制人物按钮的颜色,得到焦点呈红色,失去焦点为淡黄色。
3.可以通过键盘控制各个按钮的移动:按“↓”键,人物按钮向下移动其它方向类似。
4.可以通过鼠标点击来控制各个人物按钮的移动:如果点击的位置在按钮的上半部分则向上移动,如果点击按钮的下半部分则向下,左右原理类似。
5.有“重新开始按钮”点击重新开始按钮各个人物按钮复位,能重新开始游戏。
6.小程序能够自由的缩小,放大,关闭。
三、设计思路1.首先是界面设计,该界面主要包括十个人物按钮(马、曹操、关羽等)以及旁边的四个边框按钮和重新开始按钮。
对于人物按钮,创建Button 按钮的子类,在该类中定义按钮的一些新的属性和焦点事件监听器,如:按钮的标签名、按钮的颜色、按钮的排号(如这里有十个人物按钮,从1排到十,在程序中可以依靠这个属性区分人物按钮)、按钮颜色、按钮获得或失去焦点事件。
同时在设计该界面时要考虑到各个按钮的位置、大小等情况。
2.对界面上的各人物按钮添加相应的相应事件焦点事件:通过焦点事件各个按钮的是焦点。
鼠标事件、键盘事件:通过这两种事件去完成界面上各人物按钮的移动。
对重新开始按钮定义动作事件(ActionEvent)完成界面初始化功能也就是各人物按钮重新归位。
四、详细设计详细设计主要是关于代码,编程思想和程序实现的具体描述。
其中包含具体的运行界面,操作界面,运行结果图,和运行前图形界面。
此外,还有一定的流程展示,各个运行模块的结构关系展示,对华容道小游戏的具体实现的具体展示,以及部分主要的代码的展示和分析说明,编程思想的体现。
1.结构建立:在road的project下建立road包中建立Road类,如下图图4-1在road的project下建立road包中建立Road类2.上机模块建立1、界面设计界面设计主要是根据功能要求构建界面,界面中的每个元素均应有其作用,以支持功能的实现,界面设计还要考虑到界面风格的一致、符合一般Applet的图像协调。
设计应简洁实用,大方美观,界面协调,便于使用者进行操作,按钮布局合理,大小适中,还应具有使用方法的温馨提示,告诉使用者如何运用程序。
图4-2华容道小游戏运行界面程序构造:利用以下代码对按钮构造name=s;this.number=number;left_x=x;left_y=y;width=w;height=h;setBackground(Color.gray);当人物没有获取焦点的时候为灰色。
road.add(this); addKeyListener(road);setBounds(x,y,w,h);addFocusListener(this);rect=new Rectangle(x,y,w,h);载入事件并响应。
优化程序:根据程序员自己的要求设计更为美观的图形界面,创造更加丰富的按钮颜色,和其它颜色,达到优化图形界面的目的。
具体实现方法如下:public void focusGained(FocusEvent e){Color myColor=new Color(20,100,180); this.setBackground(myColor);}程序员可以更改括号中的数值来改变按钮获取焦点后的颜色,达到美观的目的。
此处我选择了(20,100,180)获取颜色为浅蓝色。
程序初始化:对华容道小游戏程序中的人物、边框、按钮、计步器进行初始化。
People people[]=new People[10];Rectangle left,right,above,below;//华容道的边界.Button restart=new Button("重新开始");int count=0;TextField t=new TextField(20);//此为计步器的初始化。
界面布局:对程序中应有的按钮、边框、计步器显示进行合理的安排,将其放在图形界面中的适当位置。
t.setBounds(180,330,20,20);t.setEnabled(false); restart.setBounds(105,15,100,25);restart.addActionListener(this);//以上为对重新开始按钮进行的坐标设置。
people[0]=new People(0,"曹操",104,54,100,100,this);people[1]=new People(1,"关羽",104,154,100,50,this); people[2]=new People(2,"张飞",54,154,50,100,this);以及people[8]=new People(8,"兵",104,204,50,50,this)people[9]=new People(9,"兵",154,204,50,50,this);等是为人物进行的位置设置。
还有left=new Rectangle(49,49,5,260);above=new Rectangle(49,49,210,5);都是对坐标位置进行设置。
键盘控制操作获得焦点的人物活动:图4-3控制兵向下图4-4控制兵向右图4-5控制兵向左图4-6控制兵向上键盘事件:public void keyPressed(KeyEvent e){People man=(People)e.getSource(); //鼠标获取事件源man.rect.setLocation(man.getBounds().x, man.getBounds().y);if(e.getKeyCode()==KeyEvent.VK_DOWN)键盘控制向下代码为man.left_y=man.left_y+50;man.setLocation(man.left_x,man.left_y);man.rect.setLocation(man.left_x,man.left_y);count++;t.setText(""+count+"");//此为计步器的代码for(int i=0;i<10;i++){if((man.rect.intersects(people[i].rect))&&(man.number!=i)){man.left_y=man.left_y-50;man.setLocation(man.left_x,man.left_y);man.rect.setLocation(man.left_x,man.left_y);count--;t.setText(""+count+"");}}if(man.rect.intersects(below)){man.left_y=man.left_y-50;man.setLocation(man.left_x,man.left_y);man.rect.setLocation(man.left_x,man.left_y);count--;t.setText(""+count+"");}}//以上为判断是否和其它人物或下边界出现重叠,若出现重叠就退回50个单位距离。
键盘控制向上、向左、向右代码和控制向下的代码类似。
使用方法提示:g.drawString("使用方法:",10,10);g.drawString("点击相应的人物,",10,20);g.drawString("按键盘上的上下",10,30);g.drawString("左右键进行移动",10,40);在图形界面的左上角进行使用方法提示,方便使用者了解华容道小游戏的操作步骤。
能够利用鼠标和键盘进行游戏控制。
程序提高部分:添加计步器图4-7计步器初始时刻为空图4-8当兵向下行走一步时计步器显示为1图4-9当使用者点击了重新开始的按钮后步数自动归0计步器的实现;int count=0;TextField t=new TextField(20);创建一个大小为20的文本框,令count为0.t.setBounds(180,330,20,20);将文本框的位置进行设置public void keyPressed(KeyEvent e){if(e.getKeyCode()==KeyEvent.VK_DOWNcount++;t.setText(""+count+"");当键盘点击向下操作时,计步器的步数加一。
for(int i=0;i<10;i++){if((man.rect.intersects(people[i].rect))&&(man.number!=i)) {man.left_y=man.left_y-50;man.setLocation(man.left_x,man.left_y);man.rect.setLocation(man.left_x,man.left_y);count--;t.setText(""+count+"");当和其它人物或下边界出现重叠时,退回50个单位距离后,count就减一当向左,向右,向上操作时计步器的基本操作和向下一样。
this.count=0;t.setText(""+count+"");当点击重新开始的按钮时计步器的步数变为0。
重新开始的实现:图4-10当游戏进行到难以进行的时候,进行重新开始图4-11游戏恢复到初始状态Button restart=new Button("重新开始");setLayout(null);add(restart);add(t);restart.setBounds(105,15,100,25);restart.addActionListener(this);对重新开始设置this.count=0;t.setText(""+count+"");//当点击重新开始的按钮时步数清零五、运行调试与分析讨论图5-1运行的图形界面经过不断的改进,实现了鼠标获取事件,键盘控制移动事件,对按钮的背景颜色进行修改,使得图形界面更加的美观合理。