java 华容道 迷弟版(向 xd-女神 吴嘉欣致敬)
// Person.java 每个方块人物是一个类
package test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Person extends JButton implements FocusListener {
private int number;
private Color c=new Color(205,205,205);
private Font font=new Font("宋体",Font.BOLD,15); public int getnum() {
return number;
}
public Person(int number,String s) {
super(s);
setBackground(c);
setFont(font);
this.number=number;
addFocusListener(this);
}
public void focusGained(FocusEvent e) {//获得焦点是调用
setBackground(Color.blue);
}
public void focusLost(FocusEvent e) {//失去焦点是调用
setBackground(c);
}
}
//package test;
//Hua_Rong_Road.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Hua_Rong_Road extends JFrame implements MouseListener,KeyListener,ActionListener {
private Person person[]=new Person[10];
private JButton left,right,above,below;
private JButton restart=new JButton("重新开始");
private JButton begin=new JButton ("欢迎来到华容道!!"); // 标题
private final int t_x=50;// 起始坐标
private final int t_y=100;
private final int l1=100;// 长度
private final int l2=15;
public Hua_Rong_Road() {
init();
setBounds(200,200,520,800);
setVisible(true);
}
public void init() {
Color c=new Color(0,255,205);
begin.setBounds(100, 30, 300,50);
begin.setBackground(c); restart.setBounds(150,650,200,50);
restart.addActionListener(this);
getContentPane().setLayout(null);
getContentPane().add(restart);//getContentPane()得到一个内容画板
getContentPane().add(begin); String name[]={"女神吴嘉欣","迷弟一","迷弟二","迷弟三","迷弟四","迷弟五","迷弟六","迷弟七","迷弟八","迷弟九"};
for(int k=0;k<name.length;k++) {
person[k]=new Person(k,name[k]);
person[k].addMouseListener(this);
person[k].addKeyListener(this);
getContentPane().add(person[k]);
}
person[0].setBounds(t_x+l1,t_y,2*l1,2*l1);
person[1].setBounds(t_x+l1,t_y+2*l1,2*l1,l1);
person[2].setBounds(t_x,t_y,l1,2*l1);
person[3].setBounds(t_x+3*l1,t_y,l1,2*l1);
person[4].setBounds(t_x,t_y+2*l1,l1,2*l1);
person[5].setBounds(t_x+3*l1,t_y+2*l1,l1,2*l1);
person[6].setBounds(t_x+l1,t_y+3*l1,l1,l1);
person[7].setBounds(t_x+2*l1,t_y+3*l1,l1,l1);
person[8].setBounds(t_x,t_y+4*l1,l1,l1);
person[9].setBounds(t_x+3*l1,t_y+4*l1,l1,l1);
person[9].requestFocus();
left=new JButton();
right=new JButton();
above=new JButton();
below=new JButton();
getContentPane().add(left);
getContentPane().add(right);
getContentPane().add(above);
getContentPane().add(below);
left.setBounds(t_x-l2,t_y-l2,l2,l2*2+l1*5);
right.setBounds(t_x+4*l1,t_y-l2,l2,l2*2+l1*5);
above.setBounds(t_x-l2,t_y-l2,l2*2+l1*4,l2);
below.setBounds(t_x-l2,t_y+5*l1,l2*2+l1*4,l2);
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) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void go(Person man,JButton direction) {
boolean move=true;
Rectangle manRect=man.getBounds();
int x=man.getBounds().x;
int y=man.getBounds().y;
if(direction==below)
y=y+l1;
else if(direction==above)
y=y-l1;
else if(direction==left)
x=x-l1;
else if(direction==right)
x=x+l1;
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.getnum()!=k))
move=false;
}
if(manRect.intersects(directionRect))
move=false;
// if(move==true) //因为是女神吴嘉欣所以不受任何约束可以直接移动,如果需要改成正确的华容道形式把这一行注释打掉就行了
man.setLocation(x,y);
if (man.getnum()==0&&x==(t_x+l1)&&y==(t_y+3*l1)) {//游戏是否胜利
int res=JOptionPane.showConfirmDialog(null, "恭喜你游戏胜利", "是否继续", JOptionPane.YES_NO_OPTION);
if(res==JOptionPane.YES_OPTION){
dispose();
new Hua_Rong_Road();
}
else return ;
}
}
public void actionPerformed(ActionEvent e) {
dispose();
new Hua_Rong_Road();
}
}
//package test;
//Mainclass.java 主类
public class Mainclass {
public static void main(String args[]) {
new Hua_Rong_Road();
}
}
效果图 :
有bug?!都说了是迷弟版
java 华容道 迷弟版(向 xd-女神 吴嘉欣致敬)的更多相关文章
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...
- Java部分总结图片版2(已加上原图链接!!!)
Java部分总结图片版2(加上原图链接)
- Java部分总结图片版(已经加上原图链接下载!!!)
Java基础知识图片版(原图下载链接)
- Java、C#双语版HttpHelper类
Java.C#双语版HttpHelper类(解决网页抓取乱码问题) 在做一些需要抓取网页的项目时,经常性的遇到乱码问题.最省事的做法是去需要抓取的网站看看具体是什么编码,然后采用正确的编码进行解码 ...
- 阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》
终极版 v1.3.0 2017年开春之际,阿里诚意献上重磅大礼:<阿里巴巴Java开发手册>,首次公开阿里官方Java代码规范标准.这套Java统一规范标准将有助于提高行业编码规范化水平, ...
- idea编辑项目出现【Information:java: javacTask: 源发行版 7 需要目标发行版 1.7】
在编译项目时候出现问题: Information:java: javacTask: 源发行版 7 需要目标发行版 1.7 解决方案:按着图片操作,这几个地方设置的一样就可以了
- 【Java】-NO.16.EBook.4.Java.1.011-【疯狂Java讲义第3版 李刚】- AWT
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.011-[疯狂Java讲义第3版 李刚]- AWT Style:EBook Series:Java ...
- 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- Swing
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.011-[疯狂Java讲义第3版 李刚]- Swing Style:EBook Series:Jav ...
- 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- JDBC
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.012-[疯狂Java讲义第3版 李刚]- JDBC Style:EBook Series:Java ...
随机推荐
- android studio maven 仓库的使用
转自:http://www.cnblogs.com/sihaixuan/p/4852974.html 原文:How to distribute your own Android library thr ...
- 【原创】QT简单计算器
代码 //main.cpp #include "calculator_111.h" #include <QtWidgets/QApplication> int main ...
- day044 cssy其他样式 js初识
float: 浮动 .t1{ float: right/left; } 关于浮动的两个特点: 1.浮动的框可以向左或向右移动,知道他的外边缘碰到包括框或另一个浮动框的边框为止. 2.由于浮动框不在文档 ...
- 【转】caffe数据层及参数
原文: 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个层(layer)构成,每一层又由许多参数组成.所有的参数都定义在caffe.proto ...
- 每天CSS学习之border-spacing
border-spacing是CSS2的一个属性.其作用是规定表格的相邻单元格边框之间的距离.如果表格的border-collapse属性值为collapse时,border-spacing设置无效. ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- vue-router-9-HTML5 History 模式
vue-router 默认 hash 模式,页面不会重新加载 用路由的 history 模式,利用 history.pushState API 来完成 URL 跳转而无须重新加载页面. const r ...
- Qt简单项目--加法计算器(详细代码注释)
Qt的简单案例--加法计算器(详细代码注释) 一.项目结构 二.项目代码 widget.h #ifndef WIDGET_H #define WIDGET_H //预编译指令, 为了避免头文件被重复包 ...
- postman工具测试接口
本篇文章主要介绍怎么在postman工具中进行接口的测试? 从以下几个方面进行介绍: 1.先介绍下接口测试 2.不同类型的接口请求方式如何在postman中进行测试 1.1 接口 什么是接口? 接口一 ...
- 20165214 预备作业3 Linux安装及学习
一.VirtualBox和Ubuntu的安装 点进VirtualBox的官网后,不知道为什么,我只看到了5.2.6版本...又看到同学反映说5.2.7版本会出现问题,我想可能是工作人员正在补5.2.7 ...