java双人五子棋源代码_java swing 双人五子棋源代码

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Toolkit;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.image.BufferedImage;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

public class FiveChessFrame extends JFrame implements Runnable,MouseListener{

/**

*

*/

private static final long serialVersionUID = 1L;

//游戏界面大小

int width=Toolkit.getDefaultToolkit().getScreenSize().width;

int height=Toolkit.getDefaultToolkit().getScreenSize().height;

int x,y; //鼠标坐标

int[][]allChess=new int[15][15]; //保存棋盘,0表示无子,1表示黑子,2表示白字

Boolean isblack=true; //当前下子是黑子还是白字,true代表黑子,false代表白子

Boolean canPlay=true; //标始当前游戏是否结束

String message="黑方先行";

String blackMessage="无限制";

String whiteMessage="无限制";

//保存棋谱,记录双方每一步落子的位置

int[]chessX=new int[255];

int[]chessY=new int[255];

int countX,countY;

//默认设置无时间限制

int maxTime=0; //保存最大时间

int blackTime=0;

int whiteTime=0; //保存黑白方所剩余的时间

Thread timer=new Thread(this);

public FiveChessFrame(){

this.setTitle("五子棋游戏");

this.setSize(500, 500);

this.setLocation((width - 500) / 2, (height - 500) / 2);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

this.repaint();

this.addMouseListener(this);

timer.start(); //开启计时线程

timer.suspend();

}

//画棋盘界面

public void paint(Graphics g){

//双缓冲技术

BufferedImage buf=new BufferedImage(500,500,BufferedImage.TYPE_INT_RGB);

Graphics g1=buf.createGraphics(); //创建画笔

g1.setColor(new Color(0,169,158)); //设置画笔颜色

g1.fill3DRect(43,60,375,375,true);

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

g1.setColor(Color.WHITE);

g1.drawLine(43,60+i*25,375+43,60+i*25);//画棋盘横线

g1.drawLine(43+i*25,60,43+i*25,375+60); //画棋盘竖线

}

g1.setFont(new Font("黑体",Font.BOLD,20));

g1.drawString("游戏信息: "+message,50,50);

g1.drawRect(30,440,180,40);

g1.drawRect(250,440,180,40); //画黑方时间与白方时间字符串的边框

g1.setFont(new Font("宋体",0,12));

g1.drawString("黑方时间: "+blackMessage,40,465);

g1.drawString("白方时间: "+whiteMessage,260,465);

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java双人贪吃蛇游戏的代码示例: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SnakeGame extends JFrame { private final int B_WIDTH = 300; private final int B_HEIGHT = 300; private final int DOT_SIZE = 10; private final int ALL_DOTS = 900; private final int RAND_POS = 29; private int DELAY = 140; private final int x[] = new int[ALL_DOTS]; private final int y[] = new int[ALL_DOTS]; private int dots; private int apple_x; private int apple_y; private boolean leftDirection = false; private boolean rightDirection = true; private boolean upDirection = false; private boolean downDirection = false; private boolean inGame = true; private Timer timer; private Image ball; private Image apple; private Image head; private int player1Score = 0; private int player2Score = 0; private boolean player1Turn = true; public SnakeGame() { initGame(); } private void initGame() { addKeyListener(new TAdapter()); setBackground(Color.black); setFocusable(true); setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT)); loadImages(); initGameBoard(); } private void loadImages() { ImageIcon iid = new ImageIcon("dot.png"); ball = iid.getImage(); ImageIcon iia = new ImageIcon("apple.png"); apple = iia.getImage(); ImageIcon iih = new ImageIcon("head.png"); head = iih.getImage(); } private void initGameBoard() { dots = 3; for (int z = 0; z < dots; z++) { x[z] = 50 - z * 10; y[z] = 50; } locateApple(); timer = new Timer(DELAY, new GameCycle()); timer.start(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); doDrawing(g); } private void doDrawing(Graphics g) { if (inGame) { g.drawImage(apple, apple_x, apple_y, this); for (int z = 0; z < dots; z++) { if (z == 0) { g.drawImage(head, x[z], y[z], this); } else { g.drawImage(ball, x[z], y[z], this); } } Toolkit.getDefaultToolkit().sync(); } else { gameOver(g); } } private void gameOver(Graphics g) { String msg = "Game Over!"; String msg2 = "Player 1 Score: " + player1Score + " Player 2 Score: " + player2Score; Font small = new Font("Helvetica", Font.BOLD, 14); FontMetrics metr = getFontMetrics(small); g.setColor(Color.white); g.setFont(small); g.drawString(msg, (B_WIDTH - metr.stringWidth(msg)) / 2, B_HEIGHT / 2); g.drawString(msg2, (B_WIDTH - metr.stringWidth(msg2)) / 2, (B_HEIGHT / 2) + 20); } private void checkApple() { if ((x[0] == apple_x) && (y[0] == apple_y)) { dots++; locateApple(); if (player1Turn) { player1Score++; } else { player2Score++; } } } private void move() { for (int z = dots; z > 0; z--) { x[z] = x[(z - 1)]; y[z] = y[(z - 1)]; } if (leftDirection) { x[0] -= DOT_SIZE; } if (rightDirection) { x[0] += DOT_SIZE; } if (upDirection) { y[0] -= DOT_SIZE; } if (downDirection) { y[0] += DOT_SIZE; } } private void checkCollision() { for (int z = dots; z > 0; z--) { if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) { inGame = false; } } if (y[0] >= B_HEIGHT) { inGame = false; } if (y[0] < 0) { inGame = false; } if (x[0] >= B_WIDTH) { inGame = false; } if (x[0] < 0) { inGame = false; } if(!inGame) { timer.stop(); } } private void locateApple() { int r = (int) (Math.random() * RAND_POS); apple_x = ((r * DOT_SIZE)); r = (int) (Math.random() * RAND_POS); apple_y = ((r * DOT_SIZE)); } private class TAdapter extends KeyAdapter { @Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if (key == KeyEvent.VK_LEFT && !rightDirection) { leftDirection = true; upDirection = false; downDirection = false; } if (key == KeyEvent.VK_RIGHT && !leftDirection) { rightDirection = true; upDirection = false; downDirection = false; } if (key == KeyEvent.VK_UP && !downDirection) { upDirection = true; rightDirection = false; leftDirection = false; } if (key == KeyEvent.VK_DOWN && !upDirection) { downDirection = true; rightDirection = false; leftDirection = false; } } } private class GameCycle implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if (inGame) { checkApple(); checkCollision(); move(); if (player1Turn) { player1Turn = false; } else { player1Turn = true; } } repaint(); } } public static void main(String[] args) { EventQueue.invokeLater(() -> { JFrame ex = new SnakeGame(); ex.setVisible(true); }); } } ``` 这个示例代码使用了Java Swing库来创建游戏窗口和图形界面,同时实现了基本的游戏逻辑和双人模式。你可以根据自己的需求对代码进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值