这是之前Java课程的一个作业,主要是为了熟悉UI布局和多线程。
玩家和电脑掷骰子,比较大小,游戏规则可以自己定,
我设置的规则:游戏规则:三颗骰子,将您掷的骰子各点数与电脑随机出现的骰子点数进行对比:
"若您掷出豹子数,则赢,电脑掷出豹子数,则输;若您掷出顺子,则赢,电脑掷出顺子,则输;"
"若您的骰子中点数和比电脑掷的点数和大,则赢;小则输;一样大则和."
准备好六颗骰子的图片,在项目里建一个image文件,图片放里面
游戏界面:
package gameOnline;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.Random;
import java.util.List;
public class Game extends JFrame implements ActionListener{
private static List<Icon> photo=new ArrayList<Icon>();
Thread t1,t2,t3,t4,t5,t6;
IconThread p1,p2,p3,p4,p5,p6;
private JLabel j1,j2,j3;
private JLabel k1,k2,k3;
private JButton start;
private JLabel result;
static int playerSum;
static int computerSum;
public static void main(String[] args) {
Game game=new Game();
game.show();
}
//布置游戏UI界面
@SuppressWarnings("deprecation")
public void show()
{
JFrame frame = new JFrame();
frame.setSize(400,460);
frame.setLocation(480, 220);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setTitle("掷骰子游戏");
frame.getContentPane().setLayout(null);
frame.setResizable(false);
String path="image\\tim.jpg";
ImageIcon background=new ImageIcon(path);
JLabel ground=new JLabel(background);
ground.setBounds(0, 0, frame.getWidth(), frame.getHeight());
JPanel panel=(JPanel)frame.getContentPane();
panel.setOpaque(false);
frame.getLayeredPane().add(ground,new Integer(Integer.MIN_VALUE));
JButton player=new JButton("玩家");
player.setSize(65, 35);
player.setLocation(165, 0);
frame.getContentPane().add(player);
j1=new JLabel();
j1.setIcon(new ImageIcon(("image\\1.jpg")));
j1.setSize(96, 96);
j1.setLocation(40, 45);
frame.getContentPane().add(j1);
j2=new JLabel();
j2.setIcon(new ImageIcon(("image\\1.jpg")));
j2.setSize(96, 96);
j2.setLocation(146, 45);
frame.getContentPane().add(j2);
j3=new JLabel();
j3.setIcon(new ImageIcon(("image\\1.jpg")));
j3.setSize(96, 96);
j3.setLocation(252, 45);
frame.getContentPane().add(j3);
JButton computer=new JButton("电脑");
computer.setSize(65, 35);
computer.setLocation(165, 264);
frame.getContentPane().add(computer);
k1=new JLabel();
k1.setIcon(new ImageIcon(("image\\6.jpg")));
k1.setSize(96, 96);
k1.setLocation(40, 300);
frame.getContentPane().add(k1);
k2=new JLabel();
k2.setIcon(new ImageIcon(("image\\6.jpg")));
k2.setSize(96, 96);
k2.setLocation(146, 300);
frame.getContentPane().add(k2);
k3=new JLabel();
k3.setIcon(new ImageIcon(("image\\6.jpg")));
k3.setSize(96, 96);
k3.setLocation(252, 300);
frame.getContentPane().add(k3);
start = new JButton("开始");
start.setSize(60, 40);
start.setLocation(265, 186);
start.addActionListener(this);
frame.getContentPane().add(start);
result = new JLabel();
result.setSize(100, 100);
result.setLocation(48, 155);
frame.getContentPane().add(result);
JButton help=new JButton("规则");
help.setSize(60,40);
help.setLocation(326, 186);
frame.getContentPane().add(help);
JDialog dialog=new JDialog();
help.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setModal(true);
JOptionPane.showMessageDialog(frame, "游戏规则:\n三颗骰子,将您掷的骰子各点数与\n电脑随机出现的骰子点数进行对比:\n"
+ "若您掷出豹子数,则赢,电脑掷出豹子数,则输;\n若您掷出顺子,则赢,电脑掷出顺子,则输;\n"
+ "若您的骰子中点数和比电脑掷的点数和大,则\n赢;小则输;一样大则和.\n","规则", JOptionPane.INFORMATION_MESSAGE);
}
});
frame.setVisible(true);
//将骰子的六个点数添加到photo的位置
photo.add(new ImageIcon(("image\\1.jpg")));
photo.add(new ImageIcon(("image\\2.jpg")));
photo.add(new ImageIcon(("image\\3.jpg")));
photo.add(new ImageIcon(("image\\4.jpg")));
photo.add(new ImageIcon(("image\\5.jpg")));
photo.add(new ImageIcon(("image\\6.jpg")));
thread();
}
@SuppressWarnings("deprecation")
public class IconThread extends Observable implements Runnable {
JLabel lab;
Random random = new Random();
List<Icon> photo;
public IconThread(JLabel lab, List<Icon> photo) {
this.lab = lab;
this.photo = photo;
}
public void run() {
int count = 10; //设置每颗骰子转动10次
while (count > 0) {
int dianshu = random.nextInt(6); //获取一个随机数[0~6)
lab.setIcon(photo.get(dianshu)); //从photo集合中取相应图片放入lab中
count--;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.setChanged();
this.notifyObservers();
}
}
public void thread(){
p1 = new IconThread(j1, photo);
p2 = new IconThread(j2, photo);
p3 = new IconThread(j3, photo);
p4 = new IconThread(k1, photo);
p5 = new IconThread(k2, photo);
p6 = new IconThread(k3, photo);
}
//玩家点数
public int playerResult(JLabel JL) {
Icon icon=JL.getIcon();
int playerSum=0;
for(int i=0;i<photo.size();i++) {
if(icon.equals(photo.get(i))) {
playerSum+=(i+1);
break;
}
}
return playerSum;
}
//电脑点数
public int computerResult(JLabel JL) {
Icon icon=JL.getIcon();
int computerSum=0;
for(int i=0;i<photo.size();i++) {
if(icon.equals(photo.get(i))) {
computerSum+=(i+1);
break;
}
}
return computerSum;
}
//冒泡排序
public static void bubbleSort(int[] arr) {
for(int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-i-1;j++) {
if(arr[j]>arr[j+1]) {
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
public void actionPerformed(ActionEvent ae) {
thread();
t1 = new Thread(p1);
t2 = new Thread(p2);
t3 = new Thread(p3);
t4 = new Thread(p4);
t5 = new Thread(p5);
t6 = new Thread(p6);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
try {
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
t6.join();
}catch(InterruptedException e) {
e.printStackTrace();
}
//调用函数获得各图片点数
int x=playerResult(j1);
int y=playerResult(j2);
int z=playerResult(j3);
int u=computerResult(k1);
int v=computerResult(k2);
int w=computerResult(k3);
int playerSum=x+y+z;
int computerSum=u+v+w;
/*
* System.out.println("玩家的点数和:"+playerSum);
* System.out.println("电脑的点数和:"+computerSum); System.out.println();
*/
int[] playerArr= {x,y,z};
int[] computerArr= {u,v,w};
bubbleSort(playerArr);
bubbleSort(computerArr);
try {
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
//玩家掷出豹子
if(x==y&&y==z) {
result.setIcon(new ImageIcon(("image\\win.jpg")));
}
//电脑掷出豹子
else if(u==v&&v==w) {
result.setIcon(new ImageIcon(("image\\lose.jpg")));
}
//玩家掷出顺子
else if(playerArr[0]==1&&playerArr[1]==2&&playerArr[2]==3) {
result.setIcon(new ImageIcon(("image\\win.jpg")));
}
else if(playerArr[0]==2&&playerArr[1]==3&&playerArr[2]==4) {
result.setIcon(new ImageIcon(("image\\win.jpg")));
}
else if(playerArr[0]==3&&playerArr[1]==4&&playerArr[2]==5) {
result.setIcon(new ImageIcon(("image\\win.jpg")));
}
else if(playerArr[0]==4&&playerArr[1]==5&&playerArr[2]==6) {
result.setIcon(new ImageIcon(("image\\win.jpg")));
}
//电脑掷出顺子
else if(computerArr[0]==1&&computerArr[1]==2&&computerArr[2]==3) {
result.setIcon(new ImageIcon(("image\\lose.jpg")));
}
else if(computerArr[0]==2&&computerArr[1]==3&&computerArr[2]==4) {
result.setIcon(new ImageIcon(("image\\lose.jpg")));
}
else if(computerArr[0]==3&&computerArr[1]==4&&computerArr[2]==5) {
result.setIcon(new ImageIcon(("image\\lose.jpg")));
}
else if(computerArr[0]==4&&computerArr[1]==5&&computerArr[2]==6) {
result.setIcon(new ImageIcon(("image\\lose.jpg")));
}
//比较大小
else if (playerSum > computerSum ) {
result.setIcon(new ImageIcon(("image\\win.jpg")));
}
else if(playerSum < computerSum ){
result.setIcon(new ImageIcon(("image\\lose.jpg")));
}
else {
result.setIcon(new ImageIcon(("image\\peace.jpg")));
}
}
}
运行结果:
大概的设计就是这样。