首 页 | 关于我们 | 课程设置 | 咨询报名 | 学员作品 | 网上教学 | 实习就业 | 诚征加盟 | 出国留学 |
 
北京金海韩国游戏学院—学生作品《汉诺塔》

一、概述...............................................1

  • 游戏介绍:.........................................1-2
  • 游戏特色:.........................................2

二、游戏图片...........................................2

三、游戏音乐...........................................2

四、游戏截图...........................................3-4

五、不足之处...........................................4

六、项目评语...........................................5

附录:游戏设计.........................................6


一、概述

1、游戏介绍:

游戏名称:《汉诺塔》

游戏题材:根据欧洲中世纪传说进行改编

游戏风格:开拓思维

游戏类型:益智类游戏

运行环境:支持jvm虚拟机的浏览器

开发工具:J2se

操作方式:小键盘数字键

游戏运行环境: Window 98操作系统以上

基本配置推荐配置

处理器CPU:赛扬1.0以上均可流畅运行

显卡:集成

声卡:集成

硬盘:10M

内存:64MB RAM

操作系统:支持jvm虚拟机的浏览器的操作系统

网络:56K 以上Modem 宽带:(ADSL,Cable Modem)

发行区域:北京

策划编程人员:5人

所在学校:北京金海计算机培训学校

用户群体:老少皆宜

游戏故事背景:据传说是在遥远的欧洲中世纪某个修道院的修道士所创。

2、游戏特色:
(1) 此游戏简化了以往游戏的繁琐操作,提高了游戏的娱乐性和可玩性。

(2) 该游戏适合任何人群,是居家旅行,工作之余,茶余饭后轻松休闲的最加方式。

可以缓解工作疲劳,精神压力,使身心得到全部放松,有益身心健康。

(3) 此外还是一款不错的考验人们动手和动脑的益智类游戏。从轻松休闲的游戏过程中开拓了自身的

视野,增强了自身的思维方式和模式。(尤其对经常从事脑力活动的人群打有益处)

(4) 画面声音出色,惟妙惟肖,且操作简易,值得挑战。

二、游戏图片
此游戏的所有图片都是用JAVA程序编译出来的,这样做的目的是为了大幅度提高游戏运行的速度。

三、游戏音乐:
游戏的声效是单独引用了SUN公司制作声效的import sun.audio.*;引入sun.audio包完成的。

此游戏在声效上已经突破了常规的声音制作模式,给人耳目一新的感觉。

四、游戏截图:




游戏最开始的原始画面


游戏进行中的游戏截图




游戏成功后的游戏截图

五、项目评语:

评语:北京金海计算机培训学校海标工作组(陈余,张卫,黄月光,倪时伟,扬宏毅)设计的游戏是基于Applet平台的游戏,此款游戏功能齐全,编码规范,而且有很好的移植性,稍加修改就能移植到各种无线平台,操作简单,体现了软件开发者先进的编程思想和优秀设计者的素质。我们课程分为三大部(初级,中级,高级)分学员完成游戏是在仅仅学完初级(java语言基础)之后,在没有系统讲解游戏的设计和游戏项目的情况下,设计出来的,可以预见,等到我们全部学习结束之后,一定能成为出色的游戏开发者。

附录:游戏设计

【教师评语】面向对象的思想理解的非常好,考虑周全,设计规范合理,条理清晰,可读性好。在初级教学中已经展现了他们良好的素质,相信在以后不但深入的学习学员们能取得更大的成功。

/*

**2005年3月6日开始***打砖块游戏****海标制作******

**用左右键控制挡板,用回车键开始游戏******

**2005年3月10日结束

*/

import java.awt.*; //引入java.awt包

import java.util.*; //引入java.util包

import java.awt.event.*; //引入java.awt.event 包

import java.applet.*; //引入java.applet包

import java.net.URL; //引入java.net.URL包

import sun.audio.*;//引入sun.audio包

import java.io.*; //引入java.io包

/**

* 游戏主框架类,在程序运行时,便生成一个静态的对象

*/

public class GroundBack extendsFrame

implements Runnable

{

AudioStreamas;//声音

AudioStreamas1;

boolean bbo=true;

boolean bo=true;

boolean bo1=true;

boolean bo2=true;

Vector va=new Vector();

Vector vb=new Vector();

Vector vc=new Vector();

String temp1,temp2,temp5;// 临时变量

char ch1,ch2;

Integer sa;

int i=1;

int k=0;

int n=3;

int a1=200;

int n2=0;

int sb=0;

int a2=400;

int lxS, lyS, lxM, lyM, lxH, lyH;

int xCenter = 80, yCenter = 500;

int radius = 50;

int AHour,AMin,ASec;

Thread timer=null;

Thread th1;

Mykey key=new Mykey();

static GroundBack gb=new GroundBack();

/**

* 构造方法

*/

public GroundBack()

{

setResizable(false);

setUndecorated(true);

if (timer== null)

{

timer = new Thread(this);//计时器

timer.setPriority(10);

timer.start();

}

this.addKeyListener(key);

th1 = new Thread(this);

th1.setPriority(1);

System.out.println (Thread.activeCount());

try

{

InputStream in = new FileInputStream ("GLASS.wav");

InputStream in1 = new FileInputStream ("1.wav");

//打开一个声音文件流作为输入

as = new AudioStream (in);

as1 = new AudioStream (in1);

}

catch( Exception e)

{

e.printStackTrace();

}

}

/**

* 绘图方法

*@paramgGraphics对象

*/

public void paint(Graphics g)

{

g.setFont(new Font("Monospaced",Font.BOLD,20));

g.setColor(Color.yellow);

g.drawString("游戏说明:游戏用键盘控制,控制键有0`1`2`3`4`5`9`+`-",50,40);

g.drawString("0表示电脑自动玩,9表示手工玩,+表示增加盘子数,-表示减少盘子数",50,66);

g.drawString("1`2`3 分别代表3根柱子,键盘输入13,表示1柱盘子移动到3柱上",50,92);

g.drawString("4表示重新开始游戏,5表示退出游戏!",50,118);

g.drawString("游戏结果:把1柱所有盘子,移到3柱上。游戏规则:大盘不能压在小盘上",50,144);

//游戏控制说明

g.setColor(Color.red);

g.setFont(new Font("Monospaced",Font.BOLD,40));

g.drawString("1",185,190);

g.drawString("2",385,190);

g.drawString("3",585,190);

g.setColor(Color.blue);

g.setFont(new Font("Monospaced",Font.BOLD,64));

g.drawString("汉 诺 塔",150,520);

g.setColor(Color.ORANGE);

g.setFont(new Font("Monospaced",Font.BOLD,32));

g.drawString("状",550,480);

g.drawString("态",550,520);

g.setColor(Color.green);

g.fillRoundRect(0,420,800,10,0,0);

move(g);

timer=null;

}

/**

* 播放声音和绘制汉诺塔图形

*/

public void n_pan()

{

try

{

InputStream in = new FileInputStream ("GLASS.wav");

InputStream in1 = new FileInputStream ("1.wav");

//打开一个声音文件流作为输入

as = new AudioStream (in);

as1 = new AudioStream (in1);

AudioPlayer.player.stop (as1);

in1.close();

}catch( Exception e){

e.printStackTrace();

}

k=0;

Graphics g=this.getGraphics();//图形

g.setColor(Color.black);//背景颜色

g.fillRect(150,200,550,220)

g.setColor(Color.green);

g.fillRoundRect(200,200,10,230,30,30);

g.fillRoundRect(400,200,10,230,30,30);

g.fillRoundRect(600,200,10,230,30,30);

g.setColor(Color.black);

g.fillRect(510,440,40,90);

g.setColor(Color.LIGHT_GRAY);

g.setFont(new Font("Monospaced",Font.BOLD,32));

g.drawString("当",510,480);

g.drawString("前",510,520);

g.setColor(Color.black);

g.fillRect(600,460,180,120);

g.setColor(Color.WHITE);

g.setFont(new Font("Monospaced",Font.BOLD,16));

g.drawString("盘子数(1-9):"+n,600,475);

g.drawString("上一步走法:",600,495);

g.drawString("总步数:",600,515);

g.setColor(Color.black);

g.fillRect(140,200,160,220);

g.fillRect(340,200,160,220);

g.fillRect(540,200,160,220);

g.setColor(Color.green);

g.fillRoundRect(200,200,10,230,30,30);

g.fillRoundRect(400,200,10,230,30,30);

g.fillRoundRect(600,200,10,230,30,30);

g.setColor(Color.magenta);

int a1=200;

int a2=400;

int n1=50/n;

va.removeAllElements();

vb.removeAllElements();

vc.removeAllElements();

for (int i=1;i<=n;i++)

{

g.fillRoundRect(a1-(n-i+1)*n1-5,a2,(n-i+1)*n1*2+20,18,30,30);

a2=a2-20;

Integer ii=new Integer(i);

va.addElement(ii);

}

bo=true;

bo1=false;

bo2=false;

}

/**

* 移动盘片

*/

public void movepan()

{

k=0;

bo=false;

bo1=true;

bo2=true;

int a2=400;

int a3=1;

int a1=200;

int n1=50/n;

for(i=1;i<=temp1.length();i++)

{

bo=false;

bo1=true;

bo2=true;

move();

try

{

th1.sleep(500);

}

catch(Exception e)

{}

bo=false;

bo1=true;

bo2=true;

}

bo=true;

bo1=true;

bo2=true;

}

/**

*

*/

public void tower(int n,String a,String b,String c)

{

String temp,temp3,temp4;

if (n%2==0)

{

temp=b;

b=c;

c=temp;

}

temp1=a;

temp2=c;

for (int i=1;i<n;i++)

{

temp3=temp1.replaceAll(a,"a");

temp3=temp3.replaceAll(b,"b");

temp3=temp3.replaceAll(c,"c");

temp3=temp3.replaceAll("a",c);

temp3=temp3.replaceAll("b",a);

temp3=temp3.replaceAll("c",b);

temp4=temp2.replaceAll(a,"a");

temp4=temp4.replaceAll(b,"b");

temp4=temp4.replaceAll(c,"c");

temp4=temp4.replaceAll("a",c);

temp4=temp4.replaceAll("b",a);

temp4=temp4.replaceAll("c",b);

temp1=temp1+a+temp3;

temp=b;

b=c;

c=temp;

temp2=temp2+c+temp4;

}

}

/**

*

*/

public void move()

{

bo=false;

bo1=true;

bo2=false;

int n1=50/n;

Graphics g=this.getGraphics();

ch1=temp1.charAt(i-1);

if (ch1=='1')

{

a1=200;

sa=(Integer)va.lastElement();

n2=va.size();

va.removeElementAt(n2-1);

}

if (ch1=='2')

{

a1=400;

sa=(Integer)vb.lastElement();

n2=vb.size();

vb.removeElementAt(n2-1);

}

if (ch1=='3')

{

a1=600;

sa=(Integer)vc.lastElement();

n2=vc.size();

vc.removeElementAt(n2-1);

}

sb=sa.intValue();

g.setColor(Color.black);

g.fillRoundRect(a1-(n-sb+1)*n1-5,a2-(n2-1)*20,(n-sb+1)*n1*2+20,18,30,30);

g.setColor(Color.green);

g.fillRect(a1,a2-(n2-1)*20,10,18);

ch2=temp2.charAt(i-1);

if (ch2=='1')

{

va.addElement(sa);

a1=200;

n2=va.size();

}

if (ch2=='2')

{

vb.addElement(sa);

a1=400;

n2=vb.size();

}

if (ch2=='3')

{

vc.addElement(sa);

a1=600;

n2=vc.size();

}

g.setColor(Color.magenta);

g.fillRoundRect(a1-(n-sb+1)*n1-5,a2-(n2-1)*20,(n-sb+1)*n1*2+20,18,30,30);

g.setColor(Color.black);

g.fillRect(680,502,50,16);

g.setColor(Color.black);

g.fillRect(690,480,60,20);

g.setColor(Color.WHITE);

g.setFont(new Font("Monospaced",Font.BOLD,16));

//g.drawString("盘子数(1-9):"+n,600,475);

g.drawString(ch1+"--"+ch2 ,700,495);

g.drawString(""+i,700,515);

if(k>0)

{

this.k++;

i++;

}

bo=true;

try

{

InputStream in = new FileInputStream ("GLASS.wav");

InputStream in1 = new FileInputStream ("1.wav");

//打开一个声音文件流作为输入

as = new AudioStream (in);

as1 = new AudioStream (in1);

}catch( Exception e){

e.printStackTrace();

}

AudioPlayer.player.start (as);

if (vc.size()==n)

{

g.setColor(Color.red);

g.setFont(new Font("Monospaced",Font.BOLD,160));

g.drawString("成功",250,350);

bo=true;

bo1=true;

bo2=true;

//AudioPlayer.player.stop (as1);

AudioPlayer.player.start (as1);

}

}

/**

*

*/

public void gdraw(String g1,String g2,String g3,

Vector av,Vector bv,Vector cv)

{

GThread tt=new GThread();

String gg1=new String(g1);

String gg2=new String(g2);

String gg3=new String(g3);

Vector aav=av;

Vector bbv=bv;

Vector ccv=cv;

if (k>=1)

{

temp5=temp5+gg1;

if (temp5.length()==1)

{

Graphics g=gb.getGraphics();

if (aav.size()>0)

{

bbo=true;

tt.start();

}

g.setColor(Color.black);

g.fillRect(690,480,60,20);

g.setColor(Color.yellow);

g.setFont(new Font("Monospaced",Font.BOLD,16));

g.drawString(gg1+"-" ,700,495);

}

if (temp5.length()==2)

{

bbo=false;

try

{

tt.join();

}

catch(Exception e){}

Graphics g=gb.getGraphics();

g.setColor(Color.black);

g.fillRect(690,480,60,20);

if (temp5.charAt(0)!=temp5.charAt(1))

{

int sb=0;

int sb1=0;

char ch1,ch2,ch3,ch4;

int a1=200;

int n2=0;

int a2=400;

Integer sa=new Integer(0);

Integer sa1=new Integer(0);

ch3=temp5.charAt(0);

ch4=temp5.charAt(1);

if ((ch3==gg2.charAt(0))&(bbv.size()>0))

{

sa=(Integer)bbv.lastElement();

sb=sa.intValue();

if (aav.size()>0)

{

sa1=(Integer)aav.lastElement();

sb1=sa1.intValue();

}

if (sb>sb1)

{

temp1=temp1+gg2;

temp2=temp2+gg1;

gb.move();

}

}

if ((ch3==gg3.charAt(0))&(ccv.size()>0))

{

sa=(Integer)ccv.lastElement();

sb=sa.intValue();

if (aav.size()>0)

{

sa1=(Integer)aav.lastElement();

sb1=sa1.intValue();

}

if (sb>sb1)

{

temp1=temp1+gg3;

temp2=temp2+gg1;

gb.move();

}

}

temp5="";

}

}

}

/**

* 绘制时钟

*/

public void drawScale(Graphics g)

{

int xHour, yHour, xMinute, yMinute;

g.setColor(Color.yellow);

for (int i = 0; i < 12; i++) {

xHour = (int) (Math.cos( (i * 30) * 3.14f / 180 - 3.14f / 2) * radius +

xCenter);

yHour = (int) (Math.sin( (i * 30) * 3.14f / 180 - 3.14f / 2) * radius +

yCenter);

g.fill3DRect(xHour - 3, yHour - 3, 6, 6, true);

}

public void move(Graphics g)

{

int xHour, yHour, xMinute, yMinute, xSecond, ySecond, second, minute, hour;

String today;

this.drawScale(g);

Date date = new Date();

second = date.getSeconds();

minute = date.getMinutes();

hour = date.getHours();

today = date.toLocaleString();

xSecond = (int) (Math.cos(second * 3.14f / 30 - 3.14f / 2) * radius +

xCenter);

ySecond = (int) (Math.sin(second * 3.14f / 30 - 3.14f / 2) * radius +

yCenter);

xMinute = (int) (Math.cos(minute * 3.14f / 30 - 3.14f / 2) * (radius - 10) +

xCenter);

yMinute = (int) (Math.sin(minute * 3.14f / 30 - 3.14f / 2) * (radius - 10) +

yCenter);

xHour = (int) (Math.cos( (hour * 30 + minute / 2) * 3.14f / 180 - 3.14f / 2) *

(radius - 30) + xCenter);

yHour = (int) (Math.sin( (hour * 30 + minute / 2) * 3.14f / 180 - 3.14f / 2) *

(radius - 30) + yCenter);

g.setColor(Color.white);

g.drawLine(xCenter, yCenter, xSecond, ySecond);

g.setColor(Color.green);

g.drawLine(xCenter, yCenter - 2, xMinute, yMinute);

g.drawLine(xCenter - 2, yCenter, xMinute, yMinute);

g.setColor(Color.blue);

g.drawLine(xCenter, yCenter - 3, xHour, yHour);

g.drawLine(xCenter - 3, yCenter, xHour, yHour);

if(AHour == hour && AMin == minute && ASec == second)

{

}

}

public void run()

{

int ji=1;

while (true)

{

ji++;

try

{

timer.sleep(1000);

}

catch (Exception e) {}

this.repaint(30,450,100,100);

}

}

//class Mykey

class GThread extends Thread

{

public void run()

{

int col=1;

int n1=50/n;

ch1=temp5.charAt(0);

if (ch1=='1')

{

a1=200;

sa=(Integer)va.lastElement();

n2=va.size();

}

if (ch1=='2')

{

a1=400;

sa=(Integer)vb.lastElement();

n2=vb.size();

}

if (ch1=='3')

{

a1=600;

sa=(Integer)vc.lastElement();

n2=vc.size();

}

sb=sa.intValue();

Graphics g=gb.getGraphics();

while (bbo)

{

if (col%2==1)

{

g.setColor(Color.black);

g.fillRoundRect(a1-(n-sb+1)*n1-5,a2-(n2-1)*20,(n-sb+1)*n1*2+20,18,30,30);

g.setColor(Color.green);

g.fillRect(a1,a2-(n2-1)*20,10,18);

}

else

{

g.setColor(Color.magenta);

g.fillRoundRect(a1-(n-sb+1)*n1-5,a2-(n2-1)*20,(n-sb+1)*n1*2+20,18,30,30);

}

col++;

try

{

this.sleep(200);

}

catch (Exception e) {}

}

g.setColor(Color.magenta);

g.fillRoundRect(a1-(n-sb+1)*n1-5,a2-(n2-1)*20,(n-sb+1)*n1*2+20,18,30,30);

}

}

/**

* 键盘控制盘片运动

*/

class Mykey extends KeyAdapter

{

public void keyTyped(KeyEvent kevent)

{

//tt=new GThread();

if(kevent.getKeyChar()=='0')

{

if (!bo1&bo)

{

Graphics g=gb.getGraphics();

g.setColor(Color.black);

g.fillRect(510,440,40,90);

g.setColor(Color.LIGHT_GRAY);

g.setFont(new Font("Monospaced",Font.BOLD,32));

g.drawString("自",510,480);

g.drawString("动",510,520);

gb.tower(n,"1","2","3");

gb.movepan();

}

}

if(kevent.getKeyChar()=='9')

{

if (!bo2&bo)

{

gb.k=1;

i=1;

gb.tower(n,"1","2","3");

Graphics g=gb.getGraphics();

g.setColor(Color.black);

g.fillRect(510,440,40,90);

g.setColor(Color.LIGHT_GRAY);

g.setFont(new Font("Monospaced",Font.BOLD,32));

g.drawString("手",510,480);

g.drawString("工",510,520);

temp1="";

temp2="";

temp5="";

}

}

if(kevent.getKeyChar()=='1')

{

if (!bo2&bo)

gb.gdraw("1","2","3",va,vb,vc);

}

if(kevent.getKeyChar()=='2')

{

if (!bo2&bo)

gb.gdraw("2","1","3",vb,va,vc);

}

if(kevent.getKeyChar()=='3')

{

if (!bo2&bo)

gb.gdraw("3","1","2",vc,va,vb);

}

if(kevent.getKeyChar()=='4')

{

if (bo)

{

gb.tower(n,"1","2","3");

gb.n_pan();

}

}

if(kevent.getKeyChar()=='+')

{

if (bo)

{

n=n+1;

if (n>9)

{

n=9;

}

else

{

gb.tower(n,"1","2","3");

gb.n_pan();

}

}

}

if(kevent.getKeyChar()=='-')

{

if (bo)

{

n=n-1;

if (n==0)

{

n=1;

}

else

{

gb.tower(n,"1","2","3");

gb.n_pan();

}

}

}

if(kevent.getKeyChar()=='5')

{

System.exit(0);

}

}

}

// 游戏主函数

public static void main(String[]args)

{

gb.setBackground(Color.BLACK);

gb.setSize(1280,1024);

gb.setVisible(true);

gb.n_pan();

}

}

版权所有©2000-2004   北京金海计算机培训学校
校址:北京市南苑西营房甲5号 (北京理工大学继续教育学院院内北京金海电脑培训学校)  邮编:100076    市场宣传部:86813881
入学咨询热线:(010) 51668841 67915904   传真:(010)67915904   本站网络实名: 游戏学院 (在地址栏可直接输入抵达本站)
E-Mail: j h @ b j j i n h a i . c o m (去除字母间的空格)来信主题需注明“金海教育”字样,以免被误认为垃圾邮件删除。