日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java人点灯问题_JAVA学习,写的一个点灯小游戏

發(fā)布時(shí)間:2024/1/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java人点灯问题_JAVA学习,写的一个点灯小游戏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前寫的一個(gè)點(diǎn)燈小游戲,沒什么技術(shù)含量。

截圖:

代碼:

類Start:

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.UIManager;

public class Start {

public static void main(String[] args) {

// 使用Windows的界面風(fēng)格

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

} catch (Exception e) {

e.printStackTrace();

}

new MainFrame().setVisible(true);

}

}

類MainFrame:

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.Random;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class MainFrame extends JFrame implements ActionListener {

private static final long serialVersionUID = 1L;

private static final int PER_PIECE_SIZE = 50;

private static final int GAMEAREA_X = 10, GAMEAREA_Y = 20;

private static final int MAX_PIECES_DEGREE = (Toolkit.getDefaultToolkit().getScreenSize().height - 100) / PER_PIECE_SIZE;

private GamePanel gamePanel;

private JPanel configPanel;

private JTextField sizeTF;

private JButton startBtn;

private JLabel stepLabel;

private int light[][];

private int steps;

private boolean isWin;

private Random rand = new Random(System.currentTimeMillis());

public MainFrame() {

setTitle("點(diǎn)燈游戲");

setSize(400, 300);

//setLayout(null);

setResizable(false);

setLocationRelativeTo(null);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

gamePanel = new GamePanel();

gamePanel.setBorder(BorderFactory.createTitledBorder("規(guī)則:將所有燈調(diào)至同種顏色"));

gamePanel.addMouseListener(new MyMouseListener());

add(gamePanel, BorderLayout.CENTER);

configPanel = new JPanel();

add(configPanel, BorderLayout.SOUTH);

sizeTF = new JTextField("4");

sizeTF.setColumns(6);

sizeTF.addKeyListener(new MyKeyListener());

configPanel.add(sizeTF);

startBtn = new JButton("開始");

startBtn.addActionListener(this);

configPanel.add(startBtn);

stepLabel = new JLabel();

configPanel.add(stepLabel);

start();

}

public void init(int rows) {

light = new int[rows][];

for (int i = 0; i < rows; i++) {

light[i] = new int[rows];

}

for (int i = 0; i < rows; i++) {

int r = Math.abs(rand.nextInt() % (rows * rows));

light[r / rows][r % rows] = 1;

}

}

public void start() {

int rows = 0;

try {

rows = Integer.valueOf(sizeTF.getText().trim());

if (rows < 2) {

JOptionPane.showMessageDialog(null, "大點(diǎn)行么?", "干", JOptionPane.INFORMATION_MESSAGE);

sizeTF.setText("");

sizeTF.requestFocus();

return;

} else if (rows > MAX_PIECES_DEGREE) {

JOptionPane.showMessageDialog(null, "小點(diǎn)行么,你屏幕放的下?", "干", JOptionPane.INFORMATION_MESSAGE);

sizeTF.setText("");

sizeTF.requestFocus();

return;

}

} catch (Exception e1) {

JOptionPane.showMessageDialog(null, "不要亂輸入,OK?", "無語", JOptionPane.ERROR_MESSAGE);

sizeTF.setText("");

sizeTF.requestFocus();

return;

}

init(rows);

int width = PER_PIECE_SIZE * rows + 20;

int height = PER_PIECE_SIZE * rows + 30;

gamePanel.setSize(width, height);

gamePanel.repaint();

steps = 0;

stepLabel.setText("");

setSize(width + 10, height + 70);

repaint();

setLocationRelativeTo(null);

isWin = false;

}

@Override

public void actionPerformed(ActionEvent e) {

start();

}

public void click(int x, int y) {

int rows = light.length;

for (int i = x - 1; i <= x + 1; i++) {

if (i < 0 || i > rows - 1 || i == x) continue;

light[y][i] = light[y][i] == 0 ? 1 : 0;

//System.out.println("m" + i + " " + y);

}

for (int j = y - 1; j <= y + 1; j++) {

if (j < 0 || j > rows - 1 || j == y) continue;

light[j][x] = light[j][x] == 0 ? 1 : 0;

}

light[y][x] = light[y][x] == 0 ? 1 : 0;

}

public boolean win() {

if (isWin == true) return true;

int first = light[0][0];

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

for (int j = 0; j < light[i].length; j++) {

if (light[i][j] != first) return false;

}

}

isWin = true;

return true;

}

class MyKeyListener extends KeyAdapter {

@Override

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_ENTER) {

start();

}

}

}

class GamePanel extends JPanel {

private static final long serialVersionUID = 1L;

@Override

public void paint(Graphics g) {

super.paint(g);

if (light == null) return;

int rows = light.length;

for (int i = 0; i < rows; i++) {

for (int j = 0; j < rows; j++) {

if (light[i][j] == 0)

g.setColor(Color.BLACK);

else

g.setColor(Color.WHITE);

g.fillRect(j * PER_PIECE_SIZE + GAMEAREA_X, i * PER_PIECE_SIZE + GAMEAREA_Y, PER_PIECE_SIZE - 1, PER_PIECE_SIZE - 1);

}

}

g.setColor(Color.GRAY);

int tmp;

for (int i = 0; i <= rows; i++) {

tmp = PER_PIECE_SIZE * i - 1;

g.drawLine(GAMEAREA_X - 1, tmp + GAMEAREA_Y, PER_PIECE_SIZE * rows + GAMEAREA_X - 1, tmp + GAMEAREA_Y);

g.drawLine(tmp + GAMEAREA_X, GAMEAREA_Y - 1, tmp + GAMEAREA_X, PER_PIECE_SIZE * rows + GAMEAREA_Y - 1);

}

g.setColor(Color.RED);

if (isWin) {

g.drawString("You Win! steps:" + steps, 20, 65);

}

}

}

class MyMouseListener extends MouseAdapter {

@Override

public void mousePressed(MouseEvent e) {

if (isWin || light == null) return;

int rows = light.length;

int x = e.getX() - 10;

int y = e.getY() - 20;

if (x < 0 || x >= PER_PIECE_SIZE * rows || y < 0 || y >= PER_PIECE_SIZE * rows) return;

x /= PER_PIECE_SIZE;

y /= PER_PIECE_SIZE;

//System.out.println(x + " " +y);

switch (e.getButton()) {

case MouseEvent.BUTTON1:

click(x, y);

break;

case MouseEvent.BUTTON2:

return;

case MouseEvent.BUTTON3:

light[y][x] = light[y][x] == 0 ? 1 : 0;

break;

}

win();

steps++;

stepLabel.setText("步數(shù):" + steps);

gamePanel.repaint();

}

}

}

總結(jié)

以上是生活随笔為你收集整理的java人点灯问题_JAVA学习,写的一个点灯小游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。