目录
Java语言教程:打造你的第一款五子棋游戏
游戏简介
游戏代码
自学Java攻略及功能
1. Java基础知识
2. 面向对象编程(OOP)
Java简介
游戏简介
五子棋,又称连珠,是一种两人对弈的棋类游戏。五子棋的规则简单易懂,变化多端,非常有趣味性。棋盘为15×15或19×19的方形格子,双方轮流在棋盘上放置黑白棋子,先形成连续五个同色棋子的一方获胜。通过编写五子棋小游戏,你可以进一步锻炼Java图形编程技巧和编写程序的能力。
游戏代码
以下是一个基于Java的GUI图形界面实现的双人版五子棋小游戏代码示例。该程序拥有简洁美观的图形化界面,界面主要由棋盘、标题和游戏操作的按钮三部分组成。
java复制代码
import javax.swing.*; | |
import java.awt.*; | |
import java.awt.event.ActionEvent; | |
import java.awt.event.ActionListener; | |
import java.awt.event.MouseAdapter; | |
import java.awt.event.MouseEvent; | |
import java.io.File; | |
import java.io.IOException; | |
import javax.imageio.ImageIO; | |
import java.util.Arrays; | |
public class GomokuGame extends JFrame { | |
private static final int BOARD_SIZE = 19; | |
private static final int CELL_SIZE = 40; | |
private static final int BOARD_OFFSET = 50; | |
private static final int MARGIN = 20; | |
private static final int BUTTON_HEIGHT = 40; | |
private static final int BUTTON_WIDTH = 100; | |
private char[][] board = new char[BOARD_SIZE][BOARD_SIZE]; | |
private boolean isBlackTurn = true; | |
private Image bg; | |
private JLabel statusLabel; | |
public GomokuGame() { | |
this.setTitle("欢乐五子棋"); | |
this.setSize(800, 600); | |
this.setLocationRelativeTo(null); | |
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
this.setResizable(false); | |
try { | |
bg = ImageIO.read(new File("bg.png")); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
this.setLayout(new BorderLayout()); | |
JPanel boardPanel = new JPanel() { | |
@Override | |
protected void paintComponent(Graphics g) { | |
super.paintComponent(g); | |
drawBoard(g); | |
} | |
}; | |
boardPanel.addMouseListener(new MouseAdapter() { | |
@Override | |
public void mouseClicked(MouseEvent e) { | |
handleClick(e); | |
} | |
}); | |
statusLabel = new JLabel("黑子先手", SwingConstants.CENTER); | |
statusLabel.setFont(new Font("Serif", Font.BOLD, 16)); | |
JPanel buttonPanel = new JPanel(); | |
buttonPanel.setLayout(new GridLayout(1, 7, MARGIN, MARGIN)); | |
JButton startButton = new JButton("开始游戏"); | |
JButton helpButton = new JButton("游戏说明"); | |
JButton settingsButton = new JButton("游戏设置"); | |
JButton giveUpButton = new JButton("认输"); | |
JButton regretButton = new JButton("悔棋"); | |
JButton aboutButton = new JButton("关于"); | |
JButton exitButton = new JButton("退出"); | |
startButton.addActionListener(new ActionListener() { | |
@Override | |
public void actionPerformed(ActionEvent e) { | |
resetGame(); | |
} | |
}); | |
// Add more button listeners if needed | |
buttonPanel.add(startButton); | |
buttonPanel.add(helpButton); | |
buttonPanel.add(settingsButton); | |
buttonPanel.add(giveUpButton); | |
buttonPanel.add(regretButton); | |
buttonPanel.add(aboutButton); | |
buttonPanel.add(exitButton); | |
this.add(boardPanel, BorderLayout.CENTER); | |
this.add(statusLabel, BorderLayout.NORTH); | |
this.add(buttonPanel, BorderLayout.EAST); | |
this.setVisible(true); | |
} | |
private void drawBoard(Graphics g) { | |
g.drawImage(bg, 0, 0, this.getWidth(), this.getHeight(), null); | |
g.setColor(Color.BLACK); | |
for (int i = 0; i < BOARD_SIZE; i++) { | |
g.drawLine(BOARD_OFFSET, BOARD_OFFSET + i * CELL_SIZE, BOARD_OFFSET + (BOARD_SIZE - 1) * CELL_SIZE, BOARD_OFFSET + i * CELL_SIZE); | |
g.drawLine(BOARD_OFFSET + i * CELL_SIZE, BOARD_OFFSET, BOARD_OFFSET + i * CELL_SIZE, BOARD_OFFSET + (BOARD_SIZE - 1) * CELL_SIZE); | |
} | |
for (int i = 0; i < BOARD_SIZE; i++) { | |
for (int j = 0; j < BOARD_SIZE; j++) { | |
if (board[i][j] != ' ') { | |
g.setColor(isBlackTurn ? Color.BLACK : Color.WHITE); | |
g.fillOval(BOARD_OFFSET + j * CELL_SIZE - CELL_SIZE / 2, BOARD_OFFSET + i * CELL_SIZE - CELL_SIZE / 2, CELL_SIZE, CELL_SIZE); | |
g.setColor(Color.BLACK); | |
g.drawOval(BOARD_OFFSET + j * CELL_SIZE - CELL_SIZE / 2, BOARD_OFFSET + i * CELL_SIZE - CELL_SIZE / 2, CELL_SIZE, CELL_SIZE); | |
} | |
} | |
} | |
} | |
private void handleClick(MouseEvent e) { | |
int x = (e.getX() - BOARD_OFFSET) / CELL_SIZE; | |
int y = (e.getY() - BOARD_OFFSET) / CELL_SIZE; | |
if (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE && board[y][x] == ' ') { | |
board[y][x] = isBlackTurn ? '●' : '○'; | |
if (checkWin(y, x)) { | |
statusLabel.setText(isBlackTurn ? "黑子获胜" : "白子获胜"); | |
JOptionPane.showMessageDialog(this, isBlackTurn ? "黑子获胜" : "白子获胜"); | |
resetGame(); | |
} else { | |
isBlackTurn = !isBlackTurn; | |
statusLabel.setText(isBlackTurn ? "黑子先手" : "白子先手"); | |
} | |
this.repaint(); | |
} | |
} | |
private boolean checkWin(int row, int col) { | |
char current = board[row][col]; | |
return (checkDirection(row, col, 1, 0, current) >= 5 || // Horizontal | |
checkDirection(row, col, 0, 1, current) >= 5 || // Vertical | |
checkDirection(row, col, 1, 1, current) >= 5 || // Diagonal \ | |
checkDirection(row, col, 1, -1, current) >= 5); // Diagonal / | |
} | |
private int checkDirection(int row, int col, int rowDir, int colDir, char current) { | |
int count = 1; | |
for (int i = 1; i < 5; i++) { | |
int newRow = row + i * rowDir; | |
int newCol = col + i * colDir; | |
if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE && board[newRow][newCol] == current) { | |
count++; | |
} else { | |
break; | |
} | |
} | |
for (int i = 1; i < 5; i++) { | |
int newRow = row - i * rowDir; | |
int newCol = col - i * colDir; | |
if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE && board[newRow][newCol] == current) { | |
count++; | |
} else { | |
break; | |
} | |
} | |
return count; | |
} | |
private void resetGame() { | |
Arrays.fill(board, ' '); | |
isBlackTurn = true; | |
statusLabel.setText("黑子先手"); | |
this.repaint(); | |
} | |
public static void main(String[] args) { | |
SwingUtilities.invokeLater(new Runnable() { | |
@Override | |
public void run() { | |
new GomokuGame(); | |
} | |
}); | |
} | |
} |
自学Java攻略及功能
1. Java基础知识
Java是一种广泛使用的面向对象的编程语言,具有跨平台性、封装性、继承性和多态性等特点。Java程序通常由类、对象、方法和属性等组成。你需要掌握Java的基本语法,包括变量和数据类型、运算符、控制结构(条件语句、循环语句)、数组等。
2. 面向对象编程(OOP)
面向对象编程是一种编程范式,它通过使用“对象”来设计软件。在Java中,面向对象编程(OOP)的概念非常核心,主要包括以下几个关键方面:
- 类(Class)与对象(Object):
- 类是创建对象的蓝图或模板,它定义了对象的属性和行为。
- 对象是类的实例,每个对象都是其类的一个具体实现,具有自己的属性和状态。
- 封装(Encapsulation):
- 封装是将数据和操作数据的方法绑定在一起,形成一个不可分割的单位。通过访问修饰符(如private、protected、public)控制对对象属性和方法的访问,以保护数据的完整性。
- 继承(Inheritance):
- 继承允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。这是实现代码重用和扩展性的重要手段。
- 通过继承,子类可以继承父类的所有非私有属性和方法,并可以添加新的属性或覆盖(重写)父类的方法。
- 多态(Polymorphism):
- 多态允许一个接口或父类引用指向子类对象。这意味着相同的操作或方法调用会根据实际对象的类型表现出不同的行为。
- Java中的多态主要通过方法重写(Override)和接口实现来实现。
- 抽象(Abstraction):
- 抽象是将类的具体实现与类的接口分离的过程。通过抽象类和方法,可以定义类的行为而不提供具体的实现细节。
- 抽象类不能被实例化,但可以包含抽象方法(没有实现的方法),这些方法必须由子类提供实现。
- 接口(Interface):
- 接口是Java中另一种实现多态的方式,它完全是一种抽象类型,用于指定一组方法,但不提供它们的实现。
- 一个类可以实现一个或多个接口,通过提供接口中所有方法的具体实现来遵循接口契约。
自学Java的进一步攻略:
- 实践项目:理论知识的学习是基础,但真正掌握Java需要通过实际的项目来锻炼。尝试开发一些小项目,如简单的计算器、学生信息管理系统等,来应用所学知识。
- 阅读官方文档和API:Java的官方文档和API是宝贵的资源,它们提供了详细的类库说明和示例代码,有助于深入理解Java的各个方面。
- 参与开源项目:加入开源项目不仅可以学习他人的代码风格和最佳实践,还能通过贡献代码来提升自己的编程能力。
- 持续学习:Java是一个不断发展的语言,新的特性和库不断出现。保持对新技术和新工具的关注,持续学习是成为一名优秀Java开发者的关键。
Java简介
Java是一种面向对象的编程语言,由Sun Microsystems公司于1995年推出。它具有简单、安全、可移植等特点。
Java可以在不同的平台上运行,包括Windows、Mac OS、Linux等。它采用了字节码的形式,通过Java虚拟机(JVM)来运行程序。这种设计使得Java程序具有很好的可移植性,即可以在不同平台上运行,而不需要重新编写。
Java提供了丰富的类库和API,使得开发人员可以快速地开发出功能强大的应用程序。它支持多线程编程,允许在一个程序中同时执行多个任务,提高了程序的效率。此外,Java还有自动内存管理机制,即垃圾回收机制,可以自动释放不再使用的内存,减少了内存泄漏的可能性。
Java是一种跨平台的语言,即一次编写,到处运行。这是由于Java的字节码可以在不同平台上被解释和执行。这使得Java成为开发企业级应用程序的首选语言,因为它可以在不同的操作系统和服务器上运行。
Java也是一种广泛使用的语言,在互联网和移动应用开发中得到了广泛应用。许多著名的网站和移动应用程序都使用Java开发,如谷歌、亚马逊等。
总之,Java是一种功能强大、可移植、安全的编程语言,适用于各种类型的应用程序开发。它的广泛应用和丰富的开发资源使得学习和使用Java成为一个有前景的选择。
通过上述步骤和实践,你将能够逐步掌握Java编程的精髓,并在软件开发领域取得长足的进步。