时间:2018-12-19

概述:华容道

Java 华容道完整源码,本代码实现华容道游戏的整体功能。程序执行后,点击相应的人物,然后按上下左右键可以移动。点击重新开始按钮,可以将各个人物的位置重置。如果目的地的面积能够容得下当前要移动的人物,则认为可以移动。当曹操移动到“曹操到达该位置”的位置的时候,认为程序结束。

本示例中,利用Java的图形技术和消息响应机制完成了三国游戏华容道的制作。通过图形界面的技术,完成了用户提示和颜色设置。通过运用Windows下程序的键盘事件的响应,很好的实现了用户动作判断。

//HuaRongRoad.java

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

class People extends Button implements FocusListener //代表华容道人物的类

{

Rectangle rect=null;

int left_x,left_y;//按扭的左上角坐标

int width,height; //按扭的宽和高

String name;

int number;

People(int number,String s,int x,int y,int w,int h,HuaRongRoad road)

{

super(s);

name=s;

this.number=number;

left_x=x;left_y=y;

width=w;height=h;

setBackground(Color.orange);

road.add(this);

addKeyListener(road);

setBounds(x,y,w,h);

addFocusListener(this);

rect=new Rectangle(x,y,w,h);

}

public void focusGained(FocusEvent e)

{

setBackground(Color.red);

}

public void focusLost(FocusEvent e)

{

setBackground(Color.orange);

}

}

public class HuaRongRoad extends Applet

implements KeyListener,ActionListener

{

People people[]=new People[10];

Rectangle left,right,above ,below;//华容道的边界

Button restart=new Button("重新开始");

public void init()

{

setLayout(null);

restart.setBackground(Color.yellow);

add(restart);

restart.setBounds(5,5,80,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[3]=new People(3,"刘备",204,154,50,100,this);

people[4]=new People(4,"张辽",54, 54, 50,100,this);

people[5]=new People(5,"曹仁",204, 54, 50,100,this);

people[6]=new People(6,"兵 ",54,254,50,50,this);

people[7]=new People(7,"兵 ",204,254,50,50,this);

people[8]=new People(8,"兵 ",104,204,50,50,this);

people[9]=new People(9,"兵 ",154,204,50,50,this);

people[9].requestFocus();

left=new Rectangle(49,49,5,260);

people[0].setForeground(Color.white) ;

right=new Rectangle(254,49,5,260);

above=new Rectangle(49,49,210,5);

below=new Rectangle(49,304,210,5);

}

public void paint(Graphics g)

{

//画出华容道的边界

g.setColor(Color.cyan);

g.fillRect(49,49,5,260);//left

g.fillRect(254,49,5,260);//right

g.fillRect(49,49,210,5); //above

g.fillRect(49,304,210,5);//below

//提示曹操逃出位置和按键规则

g.setColor(Color.blue);

g.drawString("点击相应的人物,然后按键盘上的上下左右箭头移动",100,20);

g.setColor(Color.red);

g.drawString("曹操到达该位置",110,300);

}

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; //向下前进50个单位

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

//判断是否和其它人物或下边界出现重叠,如果出现重叠就退回50个单位距离

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);

}

}

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);

}

}

if(e.getKeyCode()==KeyEvent.VK_UP)

{

man.left_y=man.left_y-50; //向上前进50个单位

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

//判断是否和其它人物或上边界出现重叠,如果出现重叠就退回50个单位距离

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);

}

}

if(man.rect.intersects(above))

{

man.left_y=man.left_y+50;

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

}

}

if(e.getKeyCode()==KeyEvent.VK_LEFT)

{

man.left_x=man.left_x-50; //向左前进50个单位

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

//判断是否和其它人物或左边界出现重叠,如果出现重叠就退回50个单位距离

for(int i=0;i<10;i++)

{

if((man.rect.intersects(people[i].rect))&&(man.number!=i))

{

man.left_x=man.left_x+50;

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

}

}

if(man.rect.intersects(left))

{

man.left_x=man.left_x+50;

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

}

}

if(e.getKeyCode()==KeyEvent.VK_RIGHT)

{

man.left_x=man.left_x+50; //向右前进50个单位

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

//判断是否和其它人物或右边界出现重叠,如果出现重叠就退回50个单位距离

for(int i=0;i<10;i++)

{

if((man.rect.intersects(people[i].rect))&&(man.number!=i))

{

man.left_x=man.left_x-50;

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

}

}

if(man.rect.intersects(right))

{

man.left_x=man.left_x-50;

man.setLocation(man.left_x,man.left_y);

man.rect.setLocation(man.left_x,man.left_y);

}

}

}

public void keyTyped(KeyEvent e){}

public void keyReleased(KeyEvent e){}

public void actionPerformed(ActionEvent e)

{

this.removeAll();

this.init();

}

}

打开计算机的命令提示符窗口,然后在命令提示符窗口中,定位到javaprograms目录,输入javac HuaRongRoad.java 来编译程序,最后将程序加载到网页上。在javaprograms文件夹下新建一个记事本文件,内容为:

然后保存为HuaRongRoad.html,用浏览器打开HuaRongRoad.html文件便可以看到制作效果。

java华容道代码_Java 华容道完整源码相关推荐

  1. java 闹钟代码_JAVA可视化闹钟源码

    1 packageClock;2 3 importsun.audio.AudioPlayer;4 importsun.audio.AudioStream;5 6 import javax.swing. ...

  2. java愤怒的小鸟代码_java 愤怒的小鸟(flybird)源码

    [实例简介] [实例截图] [核心代码] package game; import java.awt.Color; import java.awt.Font; import java.awt.Grap ...

  3. java实现大富翁游戏(附完整源码)

    java实现大富翁游戏 以下是 Java 实现大富翁游戏的完整源码: import java.util.Random; import java.util.Scanner;public class Mo ...

  4. java实现军旗游戏(附完整源码)

    java实现军旗游戏 以下是Java实现军旗游戏的完整源码: import javax.swing.*; import java.awt.*; import java.awt.event.MouseA ...

  5. HBase的java代码开发(完整源码)

    熟练掌握通过使用java代码实现HBase数据库当中的数据增删改查的操作,特别是各种查询,熟练运用 源码在最后!! 第一步:创建maven工程,导入jar包 <dependencies>& ...

  6. Java 公司财务系统 窗体程序 完整源码

    今天为大家分享一个java语言编写的公司财务管理系统,目前系统已经完成了主要功能,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...

  7. java web 火车票预定系统 完整源码 下载直接运行

    今天为大家分享一个java web编写的火车票系统,目前系统功能已经完善,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步. 开发环境 开发 ...

  8. java 机器码 虚拟机_Java虚拟机:源码到机器码

    无论什么语言写的代码,其到最后都是通过机器码运行的,无一例外.那么对于 Java 语言来说,其从源代码到机器码,这中间到底发生了什么呢?这就是今天我们要聊的. 如下图所示,编译器可以分为:前端编译器. ...

  9. java五子棋源代码_java 五子棋游戏源码

    [实例简介] [实例截图] [核心代码] package game; import java.applet.Applet; import java.applet.AudioClip; import j ...

最新文章

  1. boost::hana::id用法的测试程序
  2. Swift 里集合类型协议的关系
  3. javascript:history.go(-1)和javascript:history.back(-1)
  4. wsl 重启_WSL(Windows Subsystem for Linux) 安装教程
  5. ps自定义形状工具_ps中借助形状工具绘制卡通图
  6. eclipse显示行号和Tab、空格、回车
  7. 谁在杀死Facebook?谁该为我们负责?
  8. outlook 附件保存位置-附件无法打开
  9. 终端花屏后的恢复办法
  10. 2.数据结构 --- 线性表
  11. 硬盘镜像和软盘镜像中内容的查看方法
  12. 流水作业调度问题 Johnson 算法
  13. VMWareStation10 密钥
  14. Internet Exploer 无法打开Internet站点、、、、已终止操作
  15. Python编程:节省内存的办法(持续更新ing...)
  16. 常见亲脂性细胞膜染料DiO, Dil, DiR, Did光谱图和实验操作流程
  17. 奇偶数判断(YZOJ-1032)
  18. ShowType=0,● 交换机命令show interfaces type 0/port_# switchport|trunk用于显示中继连接的配置情况,下面 - 赏学吧...
  19. 忠魁互联网站SEO优化的外链建设方法
  20. RK3399 Android7.1修改系统默认壁纸

热门文章

  1. 2022云计算真题:日志分析服务
  2. DFRobot高精度低功耗数字温湿度传感器SHT40
  3. 短短六年时间冲到二奢品类第一,妃鱼如何做到的?
  4. 机场航班起降与协调管理系统飞机航班(含源码+论文+答辩PPT等)
  5. 求主对角线上各元素之和(C语言)
  6. 《鸟哥的Linux私房菜》Chapter6 20180806~20180810
  7. SOEM 源码解析 ecx_FPWR
  8. np.array数组的切片
  9. Docker 取代 VM !是什么让 Docker 比 VM 或裸机更安全?
  10. 【C语言】利用for循环来创建一个金字塔