java程序编写小游戏 要求:程序随机产生20—50根火柴

java程序编写小游戏 要求:程序随机产生20—50根火柴,第1张

为什么用AWT不用 swing?滑睁

算法思想很简单

是取胜原理

用反推法:欲拿最后一根,必须留2根在那里,欲留2根,必须上一轮留2+3+1=6对方,(它拿一,你拿三,它拿二,你拿二,它拿三,你陆岁拿一。都是留2根)。再向上一轮,就是6+4=10。

取胜原理:把随机产生的火柴数,分解成:2+4的n次方+m,(m≤3),当m=0的时候,后取者胜,当m=1、2、3的时候,先取者胜。先取者取完m,留2+4的n次方给对方,对方不管取多少,你取的数和对方相加等于4,一直到最后,留2根给对方,根据规则,对方只能取一根,留一根给你取胜。

另:取完者胜(含最后一根):最后留4根给对方,不管对方取多少,你都可以一次取完。上一轮同样加4。

取胜原理:把随机产生的火柴数,分解成:4的n次方+m,(m≤3),当m=0的时候,后取者胜,当m=1、2、3的时候,先取者胜。先取者取完m,留4的n次方给对方,对方不管取多少,你取的数和对方相加等于4,一直到最后,留4根给对方。信悉岁

代码调试可用

自己用GUI搭个界面 二十分钟的事

import java.util.Scanner

public class MatchGame {

private static Scanner scanner = new Scanner(System.in)

private int total

private Computer com

private static int exit = 1

public MatchGame(int from, int to, String level) {

if (from >= to) {

throw new IllegalArgumentException()

}

total = (int)( Math.random() * (to - from)) + from

com = new Computer(level)

}

public void start() {

System.out.println("0 means endGame, 4 means restartGame!")

System.out.println("The number of matches is " + total)

System.out.println("~Start~")

System.out.println("----------------------------------------")

while (true) {

int u = scanner.nextInt()

if (u >0 &&u <4) {

System.out.println("You entered " + u)

if (total - u <= 0) {

exit = 2

endGame()

}

total = total - u

System.out.println("Total : " + total)

int c = com.play(u, total)

System.out.println("Computer selected " + c + " matches~")

if (total - c <= 0) {

exit = 0

endGame()

}

total = total - c

System.out.println("Total : " + total)

}else if (u == 0) {

endGame()

}else if (u >4 || u <0) {

System.out.println("You entered Wrong number~")

} else {

restart()

}

}

}

public static void restart() {

MatchGame game

System.out

.println("Please select Computer Level: 1:HARD 2:NORMAL 3:EASY")

int level = scanner.nextInt()

if (level == 1) {

game = new MatchGame(20, 50, Computer.HARD)

} else if (level == 2) {

game = new MatchGame(20, 50, Computer.NORMAL)

} else {

game = new MatchGame(20, 50, Computer.EASY)

}

game.start()

}

public static void endGame() {

if (exit == 0) {

System.out.println("YOU WIN!!!")

} else if (exit == 2) {

System.out.println("YOU LOSE!!!")

}

System.exit(exit)

}

public static class Computer {

private static String EASY = "EASY"

private static String NORMAL = "NORMAL"

private static String HARD = "HARD"

private static String LEVEL

private int com

public Computer(String level) {

LEVEL = level

}

public int play(int user, int total) {

if (LEVEL.equals(EASY)) {

com = 1

} else if (LEVEL.equals(NORMAL)) {

com = (int) (Math.random() * 2) + 1

} else {

int i

if (total % 4 == 0) {

i = total / 4 - 1

} else {

i = total / 4

}

com = total - 4 * i - 1

if (com == 0) {

com = 4 - user

}

}

return com

}

}

public static void main(String[] args) {

MatchGame game

System.out

.println("Please select Computer Level: 1:HARD 2:NORMAL 3:EASY")

int level = scanner.nextInt()

if (level == 1) {

game = new MatchGame(20, 50, Computer.HARD)

} else if (level == 2) {

game = new MatchGame(20, 50, Computer.NORMAL)

} else {

game = new MatchGame(20, 50, Computer.EASY)

}

game.start()

}

}

按照题目要求,人拿完火柴后计算机自动拿火柴,判断胜利者。鼠标点击ok或者键盘按enter键即可提交人拿的火柴个数。图形界面如下,

import java.awt.*

import java.awt.event.ActionListener

import java.awt.event.MouseAdapter

import java.awt.event.MouseEvent

import java.sql.PreparedStatement

import java.sql.ResultSet

import java.util.Random

import javax.swing.JOptionPane

import javax.swing.JFrame

import javax.swing.JButton

import javax.swing.JLabel

import javax.swing.JOptionPane

import javax.swing.JPanel

import javax.swing.JTextField

import javax.swing.JPasswordField

public class game extends javax.swing.JFrame implements ActionListener{

 private JPanel frame

 private JTextField pwd

 姿猛private JTextField jLabel1

 private JTextField jLabel2

 private JButton bntOk

 private JLabel l1

 private JLabel l2

 private JLabel l3

 int total

 public static void main(String[] args)

 {

 game ff=new game()

 

 

}

 public game(){

  initGUI() 

  Random r=new Random()

  total=r.nextInt(100) 

  jLabel2.setText(String.valueOf(total))

  this.setSize(500, 500) 

  this.setLocation(300, 400)

  this.setLocationRelativeTo(null)

  this.setVisible(true)

  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

  getRootPane().setDefaultButton(bntOk)

  bntOk.addActionListener(this)

 

 }

 public void actionPerformed(java.awt.event.ActionEvent evt)

 {

  int a=Integer.parseInt(jLabel1.getText())

  if((a>3)||(a==0)){

   JOptionPane.showMessageDialog(game.this,"输入错误\n请重新输入")

   return

  }

  total=total-a

  jLabel2.setText(String.valueOf(total))

  if(total<=0){

   JOptionPane.showMessageDialog(game.this,"恭喜你,胜利了!")

   return

  }

  

  Random r=new Random()  

  int b=r.nextInt(4)

  while(b==0)

   b=r.nextInt(4)

  pwd.setText(String.valueOf(b))

  迹伏桥

  total=total-b

  jLabel2.setText(String.valueOf(total))

  if(total<=0){

   JOptionPane.showMessageDialog(game.this,"很遗憾,你输了!")

  }

}

 

 private void initGUI(){

  frame=new JPanel() 厅蚂

  getContentPane().add(frame, BorderLayout.CENTER)

  frame.setLayout(null)     

  

  bntOk =new JButton()  

  bntOk.setText("OK")

  bntOk.setBounds(150, 200, 66, 30)            

  frame.add(bntOk)

 

 

  jLabel2= new JTextField()

  jLabel2.setBounds(150, 50, 100, 50)

  frame.add(jLabel2)

  l1=new JLabel()

  l1.setText("火柴数量")

  l1.setBounds(90, 50, 100, 50)  

  frame.add(l1)

  jLabel1= new JTextField()

  jLabel1.setText("")

  jLabel1.setBounds(200,149, 77, 22) 

  frame.add(jLabel1)

  

  l2=new JLabel()

  l2.setText("我拿火柴")

  l2.setBounds(100, 149, 77, 22)

  frame.add(l2)

  

  l3=new JLabel()

  l3.setText("对方拿火柴")

  l3.setBounds(100, 249, 77, 22)

  frame.add(l3)

  pwd = new JTextField()

  pwd.setBounds(200, 249, 77, 22)

  frame.add(pwd)

  

  bntOk.addMouseListener(new MouseAdapter()

  {      

   @Override

   public void mouseClicked(MouseEvent e1) {

    

    int a=Integer.parseInt(jLabel1.getText())

    if((a>3)||(a==0)){

     JOptionPane.showMessageDialog(game.this,"输入错误\n请重新输入")

     return

    }

    total=total-a

    jLabel2.setText(String.valueOf(total))

    if(total<=0){

     jLabel2.setText("0")

     JOptionPane.showMessageDialog(game.this,"恭喜你,胜利了!")

     return

    }

    

    Random r=new Random()  

    int b=r.nextInt(4)

    while(b==0)

     b=r.nextInt(4)

    pwd.setText(String.valueOf(b))

    

    total=total-b

    jLabel2.setText(String.valueOf(total))

    if(total<=0){

     JOptionPane.showMessageDialog(game.this,"很遗憾,你输了!")

    }

     

    }

   }

  )

  

  

 }

}

1、首先打开java软件,进入到软件键举慎中。

2、其次点击取火柴小游戏,进入到游戏答旁中。

3、最后点击主页中的添加,点击添加用户登录界面,点击确认,即可添加成稿敬功。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12376882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存