Flask接口签名sign原理与实例代码浅析
291
2023-01-27
java实现简单扫雷小游戏
本文实例为大家分享了java实现扫雷游戏的具体代码,供大家参考,具体内容如下
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class SaoLei implements MouseListener,ActionListener{
JPanel p=new JPanel();
JFrame frame = new JFrame("扫雷");
@SuppressWarnings("rawtypes")
JComboBox combobox = new JComboBox();
JButton reset = new JButton("重新开始");
Container container = new Conhttp://tainer();
//游戏数据结构
SaoLeiConstant constant = new SaoLeiConstant();
JButton[][] buttons = new JButton[constant.row][constant.col];//定义按钮
int[][] counts = new int [constant.row][constant.col];//定义整型数组保存按钮下方雷数
//创建构造方法
public SaoLei() {
//显示窗口
frame.setSize(600,700);//600*700
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
//添加重来、选择难度按钮
addtopButton();
//添加雷区按钮
addButtons();
//埋雷
addLei();
//添加雷的计数
calcNeiboLei();
frame.setVisible(true);
}
void addtopButton() {
p.removeAll();
p.add(reset);
reset.setBackground(Color.green);
reset.setOpaque(true);
reset.addActionListener(this);
//combobox.addItem("选择难度");
combobox.addItem("新手难度");
combobox.addItem("初级难度");
combobox.addItem("中级难度");
combobox.addItem("高级难度");
combobox.addItem("大师难度");
combobox.setBackground(Color.GREEN);
combobox.setOpaque(true);
combobox.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e) {
String item = e.getItem().toString();
if(item == "新手难度") {
constant.leiCount = 20;
ResetGame();
} else if(item == "初级难度") {
constant.leiCount = 43;
ResetGame();
} else if(item == "中级难度"){
constant.leiCount = 63;
ResetGame();
} else if(item == "高级难度"){
constant.leiCount = 99;
ResetGame();
} else if(item == "大师难度") {
constant.leiCount = 119;
ResetGame();
}
}
});
p.add(combobox);
frame.add(p,BorderLayout.NORTH);
//p.add(new Label("总雷数:"+constant.leiCount,Label.CENTER));
//p.add(new Label("总雷数:"+constant.leiCount,Label.RIGHT));
}
/*
void addnanduButton() {
nandu.setBackground(Color.green);
nandu.setOpaque(true);
nandu.addActionListener(this);
frame.add(nandu,BorderLayout.WEST);
}
void addResetButton() {
reset.setBackground(Color.green);
reset.setOpaque(true);
reset.addActionListener(this);
//reset.addMouseListener(this);
frame.add(reset,BorderLayout.NORTH);
}
*/
void addLei() {
Random rand = new Random();
int randRow,randCol;
for(int i=0; i randRow = rand.nextInt(constant.row); randCol = rand.nextInt(constant.col); if(counts[randRow][randCol] == constant.LEICODE) { i--; } else { counts[randRow][randCol] = constant.LEICODE; //buttons[randRow][randCol].setText("X"); } } } void addButtons() { frame.add(container,BorderLayout.CENTER); container.setLayout(new GridLayout(constant.row,constant.col)); for(int i=0;i for(int j=0;j JButton button = new JButton(); button.setBackground(Color.white); button.setOpaque(true); button.addActionListener(this); button.addMouseListener((MouseListener) this); buttons[i][j] = button; container.add(button); } } } void calcNeiboLei() { int count; for(int i=0;i for(int j=0;j count =0; if(counts[i][j] == constant.LEICODE) continue; if(i>0 && j>0 && counts[i-1][j-1] == constant.LEICODE) count++; if(i>0 && counts[i-1][j] == constant.LEICODE) count++; if(i>0 && j<19 &&counts[i-1][j+1] == constant.LEICODE) count++; if(j>0 && counts[i][j-1] == constant.LEICODE) count++; if(j<19 && counts[i][j+1] == constant.LEICODE) count++; if(i<19 && j>0 && counts[i+1][j-1] == constant.LEICODE) count++; if(i<19 && counts[i+1][j] == constant.LEICODE) count++; if(i<19 && j<19 && counts[i+1][j+1] == constant.LEICODE) count++; counts[i][j] = count; buttons[i][j].setMargin(new Insets(0,0,0,0));//让按钮随按钮上的图案变化 //buttons[i][j].setText(counts[i][j] + ""); } } } @Override public void actionPerformed(ActionEvent e) { JButton button = (JButton)e.getSource(); if(button.equals(reset)) { ResetGame();//重新开始游戏 } else { int count = 0; for(int i=0;i for(int j=0;j if(button.equals(buttons[i][j])) { count = counts[i][j]; if(count == constant.LEICODE) { loseGame(); } else { openCell(i,j); checkWin(); } return; } } } } } public void mouseClicked(MouseEvent e) { JButton button = (JButton)e.getSource(); if (e.getButton() == MouseEvent.BUTTON3) {//判断鼠标右击动作 for(int i=0;i for(int j=0;j if(button.equals(buttons[i][j])) { if((buttons[i][j].isEnabled() == true)) { //buttons[i][j].setEnabled(false); buttons[i][j].setMargin(new Insets(0,0,0,0));//让按钮随按钮上的图案变化 buttons[i][j].setText("?"); return; } } } LnNljuty } } } void ResetGame() { for(int i=0;i for(int j=0;j buttons[i][j].setText(""); buttons[i][j].setEnabled(true); buttons[i][j].setBackground(Color.white); counts[i][j] = 0; } } addLei(); calcNeiboLei(); } void checkWin() { for(int i=0;i for(int j=0;j if(buttons[i][j].isEnabled() == true && counts[i][j] != constant.LEICODE ) return; } } JOptionPane.showMessageDialog(frame,"Yeah,你赢了!"); } //使用递归方法打开格子 void openCell(int i, int j) { if(buttons[i][j].isEnabled() == false) return; buttons[i][j].setBackground(Color.yellow); buttons[i][j].setOpaque(true); buttons[i][j].setEnabled(false); if(counts[i][j] == 0) { if(i>0 && j>0 && counts[i-1][j-1] != constant.LEICODE) openCell(i-1,j-1); if(i>0 && j<19 && counts[i-1][j] != constant.LEICODE) openCell(i-1,j); if(i>0 && j<19 &&counts[i-1][j+1] != constant.LEICODE) openCell(i-1,j+1); if(j>0 && counts[i][j-1] != constant.LEICODE) openCell(i,j-1); if(j<19 && counts[i][j+1] != constant.LEICODE) openCell(i,j+1); if(i<19 && j>0 && counts[i+1][j-1] != constant.LEICODE) openCell(i+1,j-1); if(i<19 && counthttp://s[i+1][j] != constant.LEICODE) openCell(i+1,j); if(i<19 && j<19 && counts[i+1][j+1] != constant.LEICODE) openCell(i+1,j+1); } else { buttons[i][j].setMargin(new Insets(0,0,0,0)); buttons[i][j].setText(counts[i][j] + ""); } } void loseGame() { for(int i=0;i for(int j=0;j int count = counts[i][j]; if(count == constant.LEICODE) { buttons[i][j].setMargin(new Insets(0,0,0,0)); buttons[i][j].setText("雷"); buttons[i][j].setBackground(Color.red); buttons[i][j].setEnabled(false); } else { buttons[i][j].setMargin(new Insets(0,0,0,0)); buttons[i][j].setText(count + ""); buttons[i][j].setEnabled(false); } } } JOptionPane.showMessageDialog(frame,"error,你输了!"); } public static void main(String[] args) { new SaoLei(); } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } } 常量类 public class SaoLeiConstant { final int row = 20;//行数30 final int col = 20;//列数30 final int LEICODE = 10;//定义雷下方的数字 protected int temp = 20; protected int leiCount = temp;//雷数30 } 效果图
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~