package hhuarongdao;

 public class example {
public static void main(String args[])
{
new Hua_Rong_Road();
}
}
 package hhuarongdao;
import java.awt.*;
import javax.swing.*; import java.awt.event.*;
public class Hua_Rong_Road extends JFrame implements MouseListener,KeyListener,ActionListener
{
Person [] person = new Person[10]; //person 为自定义的一个变量类型
JButton left,right,above,below ;
JButton restart = new JButton("重新开始");
public Hua_Rong_Road()
{
init();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100,100,320,500); //设置窗口初始位置以及大小的一个函数
setVisible(true); //窗口是否可见
validate(); //使用 validate 方法会使容器再次布置其子组件。确保布局有效。
}
public void init()
{
setLayout(null);
add(restart);
restart.addActionListener(this);
String name [] = {"曹操","关","张","刘","周","黄","兵","兵","兵","兵"};
for(int i=0;i<name.length;i++)
{
person[i]= new Person(i,name[i]);
person[i].addMouseListener(this);
person[i].addKeyListener(this);
add(person[i]);
}
person[0].setBounds(104, 54, 100, 100);
person[1].setBounds(104,154,100,50);
person[2].setBounds(54,154,50,100);
person[3].setBounds(204,54,50,100);
person[4].setBounds(54,54,50,100);
person[5].setBounds(204, 54, 50, 100);
person[6].setBounds(54,254,50,50);
person[7].setBounds(204,254,50,50);
person[8].setBounds(104,204,50,50);
person[9].setBounds(154,204,50,50);
person[9].requestFocus(); //将焦点放在控件上面
left=new JButton();
right=new JButton();
above=new JButton();
below = new JButton();
add(left);
add(right);
add(above);
add(below);
left.setBounds(49, 49, 5, 260);
right.setBounds(254,49,5,260);
above.setBounds(49,49,210,5);
below.setBounds(49,304,210,5);
validate(); //确保布局有效...这条语句不要也不会对程序有太大的影响
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e)
{
Person man= (Person)e.getSource();
if(e.getKeyCode()==KeyEvent.VK_DOWN)
go(man,below);
if(e.getKeyCode()==KeyEvent.VK_UP)
go(man,above);
if(e.getKeyCode()==KeyEvent.VK_LEFT)
go(man,left);
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
go(man,right);
}
public void mousePressed(MouseEvent e)
{
Person man=(Person)e.getSource();
int x=-1,y=-1;
x=e.getX();
y=e.getY();
int w=man.getBounds().width;
int h=man.getBounds().height;
if(y>h/2) go(man,below);
if(y<h/2) go(man,above);
if(x<w/2) go(man,left);
if(x>w/2) go(man,right);
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void go(Person man, JButton direction) {
// TODO Auto-generated method stub
boolean move=true;
Rectangle manRect=man.getBounds();
int x=man.getBounds().x;
int y=man.getBounds().y;
if(direction==below) y+=50;
else if(direction==above)y-=50;
else if(direction==left)x-=50;
else if(direction==right)x+=50;
manRect.setLocation(x, y);
Rectangle directionRect=direction.getBounds();
for(int k=0;k<10;k++)
{
Rectangle personRect=person[k].getBounds();
if(manRect.intersects(personRect)&&man.number!=k)
move=false;
}
if(manRect.intersects(directionRect))
move=false;
if(move==true) man.setLocation(x,y);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub }
public void actionPerformed(ActionEvent e)
{
dispose(); //注销
new Hua_Rong_Road();
} }
 package hhuarongdao;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Person extends JButton implements FocusListener
{ int number ;
Color c= new Color(255,245,170);
Font font=new Font("宋体",Font.BOLD,12);
Person(int number,String s)
{
super(s);
setBackground(c);
setFont(font);
this.number=number;
c=getBackground();
addFocusListener(this);
}
public void focusGained(FocusEvent e)
{
setBackground(Color.red);
}
public void focusLost(FocusEvent e)
{
setBackground(c);
}
}

效果图:

Java初学之华容道游戏的更多相关文章

  1. java初学的分析

    java初学的分析第一阶段:入门阶段学习目标:简单项目开发学习内容:1.Java入门书籍,Java基础知识.关于Java入门级的书,给大家推荐过<Java编程思想>.<Java核心技 ...

  2. 疯狂java实战演义 弹球游戏代码

    package org.crazyit.ball; import java.awt.Image; import java.io.File; import javax.imageio.ImageIO; ...

  3. Java -- 乒乓球 乒乓弹球游戏

    <疯狂Java讲义> 练习游戏 import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; impo ...

  4. 基于Java的开源3D游戏引擎jMonkeyEngine

    jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就 ...

  5. 【全网最优方法】JAVA初学:错误: 找不到或无法加载主类HelloWorld

    JAVA初学:错误: 找不到或无法加载主类 HelloWorld 我这是看的黑马2019网课(B站)出现的问题. 放一下别人的图,我也是大概的问题:就是javac没问题,java却无论怎么弄都报错. ...

  6. Java写的斗地主游戏源码

    源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...

  7. java实现贪吃蛇游戏

    最简单的4个java类就可以实现贪吃蛇: main函数: package tcs; public class GreedSnake { public static void main(String[] ...

  8. Java自制人机小游戏——————————剪刀、石头、布

    package com.hello.test; import java.util.Scanner; public class TestGame { public static void main(St ...

  9. java猜数字小游戏

    /* * * 猜数字小游戏 * * 先由系统生成一个2-100之间的随机数字, * * 然后捕获用户从控制台中输入的数字是否与系统生成的随机数字相同, * * 如果相同则统计用户所猜的次数,并给出相应 ...

随机推荐

  1. Creating Timer in Oracle D2k / Forms 6i and Displaying a Clock

    Creating Timer in Oracle D2k / Forms 6i and Displaying a Clock This is about timer in D2k An externa ...

  2. [SAP ABAP开发技术总结]动态语句、动态程序

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. HDU 5810 Balls and Boxes(盒子与球)

     Balls and Boxes(盒子与球) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  4. hdu 1116 Play on Words 欧拉路径+并查集

    Play on Words Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. 利用PinYin4j 实现List中的对象按数字,字母, 汉字排序

    要排序的对象: import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPi ...

  6. ASP.NET常用正则表达式

    验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证 ...

  7. 使用Maven构建Web项目

    现自己在重新操作一下:(使用的是Eclipse JavaEE版 ps:eclipse-jee-indigo-SR1-win32,已经安装好了m2eclipse插件) 1.新建Maven项目 1.1 F ...

  8. 硬盘坏道 检测/修复 Windows

    1. 主要参看了:http://jingyan.baidu.com/article/2c8c281dfd93df0008252a9b.html 2. 2.1.hdtunepro.zip 是在 http ...

  9. Android入门:绑定本地服务

    一.绑定服务介绍   前面文章中讲过一般的通过startService开启的服务,当访问者关闭时,服务仍然存在: 但是如果存在这样一种情况:访问者需要与服务进行通信,则我们需要将访问者与服务进行绑定: ...

  10. 【摘抄】meta系列用法总结【持续更新中】

    meta标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME). ★页面描述信息NAME变量  name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人 ...