欢迎光临散文网 会员登陆 & 注册

Java swing(自己方法简化版):赛跑游戏,点击图片后图片会切换与跑动【诗书画唱】

2020-06-02 22:16 作者:诗书画唱  | 我要投稿


paint方法会无限循环。visible可见的。



package myGameqieHuan;


import java.awt.BorderLayout;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Random;


import javax.swing.BorderFactory;

import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JRadioButton;


import runningMan4.GamePanel;

import runningMan4.RunningMan;


public class GameJFrame extends JFrame {


class GamePanel extends JPanel {



public void paint(Graphics g) {


super.paint(g);

//boolean isRun = false;

for (int i = 0; i < imgBack.length; i++) {



g.drawImage(imgBack[i], 0, (getHeight() * i) / 4, getWidth(),


getHeight() / 4, this);

//点击按钮后,一开始isRun默认为true,执行有 xs[i]的部分

if (isRunNum==1) {


g.drawImage(imgRun[i], xs[i], (getHeight() * i) / 4 + 30,


getWidth()/8, getHeight() / 5, this);



else if(isRunNum==2){


g.drawImage(imgReady[i], 30, (getHeight() * i) / 4 + 30,


getWidth()/8, getHeight() / 5, this);

}



}}



}


public static void main(String[] args) {




new GameJFrame();




}

RunningMan[] mans = new RunningMan[4] ;

//四个小人的名字

String[] names={"一号选手","二号选手","三号选手", "四号选手" } ;


//单选按钮.

JRadioButton[] jr_mans=new JRadioButton[4];

ButtonGroup bg=new ButtonGroup() ;


Image[] imgBack = new Image[4];

Image[] imgReady = new Image[4];

Image[] imgRun = new Image[4];

//MyPanel jp=new MyPanel();

GamePanel game_panel = new GamePanel();

JPanel jp_control = new JPanel();

JButton bt_start = new JButton("开始");

JButton bt_restart=new JButton("重新开始");

//boolean isRun =false;

int isRunNum =2;

int[] xs = new int[4];


public GameJFrame() {


for (int i = 0; i < imgBack.length; i++) {




imgBack[i] = Toolkit.getDefaultToolkit().createImage(




"imgBack\\" + (i+1) + ".jpg");


//false为isRun


//isRun = false;

//if (false) {

//

//

//imgRun[i] = Toolkit.getDefaultToolkit().createImage(

//"imgRun\\" + (i + 1) + "3.jpg");

//

//

//

//

//} else 

//isRun = false;


if (isRunNum==1){




imgRun[i] = Toolkit.getDefaultToolkit().createImage(

"imgRun\\gif" + (i+1 ) + ".gif");

//

//

//"imgRun\\" + (i + 1) + "3.jpg");

}

// true表示执行

// false表示不执行

else if(isRunNum==2){

imgReady[i] = Toolkit.getDefaultToolkit().createImage(

"imgReady\\gif" + (i+1 ) + "2.gif");


}jr_mans[i]=new JRadioButton (names[i]);

bg.add(jr_mans[i]) ;

//放到面板上

//放到面板上T

jp_control.add(jr_mans[i]) ;



}

bt_start.addActionListener(new ActionListener() {




@Override




public void actionPerformed(ActionEvent e) {

if(! (jr_mans[0].isSelected() || jr_mans [1] . isSelected()

|| jr_mans [2] . isSelected()|| jr_mans [3] . isSelected())){

JOptionPane . showMessageDialog (GameJFrame. this, "亲,选一个啊,要不你来玩啥了.. .",

"选人",JOptionPane.WARNING_MESSAGE) ;

//没有返回值的方法可以直接写一个return不返回任何数据只是单纯的结束方法

return;

}


// if部分要写在for等部分前面,不然会提前切换图片,执行顺序不同,效果就不同。

isRunNum = 1;

//

// 下面的for的代码之所以要再执行,是因为不执行的话,

// 在下面的for中仍然默认isRunNum = 2;

// 跑动的图片的调用不会出来,就不会有图片跑动了,

// 跑动的图片的调用与图片跑动的调用的条件是isRunNum 都为 1,

// 我直接钻研较久才钻研出来的。

for (int i = 0; i < imgBack.length; i++) {



imgBack[i] = Toolkit.getDefaultToolkit().createImage(




"imgBack\\" + (i+1) + ".jpg");


//false为isRun


//isRun = false;

//if (false) {

//

//

//imgRun[i] = Toolkit.getDefaultToolkit().createImage(

//"imgRun\\" + (i + 1) + "3.jpg");

//

//

//

//

//} else 

//isRun = false;


if (isRunNum==1){




imgRun[i] = Toolkit.getDefaultToolkit().createImage(

"imgRun\\gif" + (i+1 ) + ".gif");

//

//

//"imgRun\\" + (i + 1) + "3.jpg");

}

// true表示执行

// false表示不执行

else if(isRunNum==2){

imgReady[i] = 

Toolkit.getDefaultToolkit().createImage(

"imgReady\\gif" + (i+1 ) + "2.gif");


}


}

// new GameJFrame();



new MyThread().start();

//start()为系统自带的启动线程函数


}


});

bt_restart.addActionListener(new ActionListener() {




@Override




public void actionPerformed(ActionEvent e) {

setVisible(false);

new GameJFrame2();

}


});


jp_control.add(bt_start);

jp_control.add(bt_restart);

jp_control.setBorder(BorderFactory.

createTitledBorder("游戏控制器"));



add(game_panel, BorderLayout.CENTER);


add(jp_control, BorderLayout.SOUTH);


setTitle("赛马游戏");




setSize(1100, 600);




setLocation(150, 100);




//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


setVisible(true);




}


class MyThread extends Thread{


Random ran=new Random() ;

@Override

public void run() {


while (true) {

// while (true) {

try {

Thread.sleep(100) ;


//捕捉异常

catch (InterruptedException e1) {

// TODO Auto-generated catch block

e1.printStackTrace() ;}

for(int i=0;i<xs. length; i++) {

xs[i]+=10+ran.nextInt (20);

//如果num=10+ran.nextInt (20),那么10<=num<10+20

//int[] a=new int[rand.nextint(20)+1]; 

//整数范围是[0,20)

//Java nextInt()函数 nextInt(int num) 

//能接受一个整数作为它所产生的随机整数的上限,

//下限为零,比如: nextInt(4)将产生0,1,2,3这4个数字中的任何一个数字,

//注意这里不是0-4,而是0-3。

//但下限总是零,不能更改,所以若要达到非零下限的效果,

//必须把上限减去下限的结果传给 nextInt( ),然后把下限加入 nextInt( ) 返回的整数。

}

game_panel.repaint() ;

}

}}


}



package myGameqieHuan;


import java.awt.BorderLayout;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Random;


import javax.swing.BorderFactory;

import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JRadioButton;


import runningMan4.GamePanel;

import runningMan4.RunningMan;


public class GameJFrame2 extends JFrame {


class GamePanel extends JPanel {


// paint会无限循环的

public void paint(Graphics g) {


super.paint(g);

//boolean isRun = false;

for (int i = 0; i < imgBack.length; i++) {



g.drawImage(imgBack[i], 0, (getHeight() * i) / 4, getWidth(),


getHeight() / 4, this);

//点击按钮后,一开始isRun默认为true,执行有 xs[i]的部分

if (isRunNum==1) {


g.drawImage(imgRun[i], xs[i], (getHeight() * i) / 4 + 30,


getWidth()/8, getHeight() / 5, this);



else if(isRunNum==2){


g.drawImage(imgReady[i], 30, (getHeight() * i) / 4 + 30,


getWidth()/8, getHeight() / 5, this);

}



}}



}


public static void main(String[] args) {




new GameJFrame2();




}

RunningMan[] mans = new RunningMan[4] ;

//四个小人的名字

String[] names={"一号选手","二号选手","三号选手", "四号选手" } ;


//单选按钮.

JRadioButton[] jr_mans=new JRadioButton[4];

ButtonGroup bg=new ButtonGroup() ;


Image[] imgBack = new Image[4];

Image[] imgReady = new Image[4];

Image[] imgRun = new Image[4];

//MyPanel jp=new MyPanel();

GamePanel game_panel = new GamePanel();

JPanel jp_control = new JPanel();

JButton bt_start = new JButton("开始");

JButton bt_restart=new JButton("重新开始");

//boolean isRun =false;

int isRunNum =2;

int[] xs = new int[4];


public GameJFrame2() {


for (int i = 0; i < imgBack.length; i++) {




imgBack[i] = Toolkit.getDefaultToolkit().createImage(




"imgBack\\" + (i+1) + ".jpg");


//false为isRun


//isRun = false;

//if (false) {

//

//

//imgRun[i] = Toolkit.getDefaultToolkit().createImage(

//"imgRun\\" + (i + 1) + "3.jpg");

//

//

//

//

//} else 

//isRun = false;


if (isRunNum==1){




imgRun[i] = Toolkit.getDefaultToolkit().createImage(

"imgRun\\gif" + (i+1 ) + ".gif");

//

//

//"imgRun\\" + (i + 1) + "3.jpg");

}

// true表示执行

// false表示不执行

else if(isRunNum==2){

imgReady[i] = Toolkit.getDefaultToolkit().createImage(

"imgReady\\gif" + (i+1 ) + "2.gif");


}jr_mans[i]=new JRadioButton (names[i]);

bg.add(jr_mans[i]) ;

//放到面板上

//放到面板上T

jp_control.add(jr_mans[i]) ;



}

bt_start.addActionListener(new ActionListener() {




@Override




public void actionPerformed(ActionEvent e) {

if(! (jr_mans[0].isSelected() || jr_mans [1] . isSelected()

|| jr_mans [2] . isSelected()|| jr_mans [3] . isSelected())){

JOptionPane . showMessageDialog (GameJFrame2. this, "亲,选一个啊,要不你来玩啥了.. .",

"选人",JOptionPane.WARNING_MESSAGE) ;

//没有返回值的方法可以直接写一个return不返回任何数据只是单纯的结束方法

return;

}


// if部分要写在for等部分前面,不然会提前切换图片,执行顺序不同,效果就不同。

isRunNum = 1;

//

// 下面的for的代码之所以要再执行,是因为不执行的话,

// 在下面的for中仍然默认isRunNum = 2;

// 跑动的图片的调用不会出来,就不会有图片跑动了,

// 跑动的图片的调用与图片跑动的调用的条件是isRunNum 都为 1,

// 我直接钻研较久才钻研出来的。

for (int i = 0; i < imgBack.length; i++) {



imgBack[i] = Toolkit.getDefaultToolkit().createImage(




"imgBack\\" + (i+1) + ".jpg");


//false为isRun


//isRun = false;

//if (false) {

//

//

//imgRun[i] = Toolkit.getDefaultToolkit().createImage(

//"imgRun\\" + (i + 1) + "3.jpg");

//

//

//

//

//} else 

//isRun = false;


if (isRunNum==1){




imgRun[i] = Toolkit.getDefaultToolkit().createImage(

"imgRun\\gif" + (i+1 ) + ".gif");

//

//

//"imgRun\\" + (i + 1) + "3.jpg");

}

// true表示执行

// false表示不执行

else if(isRunNum==2){

imgReady[i] = 

Toolkit.getDefaultToolkit().createImage(

"imgReady\\gif" + (i+1 ) + "2.gif");


}


}

// new GameJFrame();



new MyThread().start() ;

//start()为系统自带的启动线程函数


}


});

bt_restart.addActionListener(new ActionListener() {




@Override




public void actionPerformed(ActionEvent e) {

setVisible(false);

new GameJFrame();

}


});


jp_control.add(bt_start);

jp_control.add(bt_restart);

jp_control.setBorder(BorderFactory.

createTitledBorder("游戏控制器"));



add(game_panel, BorderLayout.CENTER);


add(jp_control, BorderLayout.SOUTH);


setTitle("赛马游戏");




setSize(1100, 600);




setLocation(150, 100);


//

//

//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


setVisible(true);




}


class MyThread extends Thread{


Random ran=new Random() ;

@Override

public void run() {


while (true) {

// while (true) {

try {

Thread.sleep(100) ;


//捕捉异常

catch (InterruptedException e1) {

// TODO Auto-generated catch block

e1.printStackTrace() ;}

for(int i=0;i<xs. length; i++) {

xs[i]+=10+ran.nextInt (20);

//如果num=10+ran.nextInt (20),那么10<=num<10+20

//int[] a=new int[rand.nextint(20)+1]; 

//整数范围是[0,20)

//Java nextInt()函数 nextInt(int num) 

//能接受一个整数作为它所产生的随机整数的上限,

//下限为零,比如: nextInt(4)将产生0,1,2,3这4个数字中的任何一个数字,

//注意这里不是0-4,而是0-3。

//但下限总是零,不能更改,所以若要达到非零下限的效果,

//必须把上限减去下限的结果传给 nextInt( ),然后把下限加入 nextInt( ) 返回的整数。

}

game_panel.repaint() ;

}

}}


}


Java swing(自己方法简化版):赛跑游戏,点击图片后图片会切换与跑动【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律