`
追梦--
  • 浏览: 37945 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

用java实现简单五子棋人人对战

 
阅读更多
用java实现简单五子棋人人对战,对于初学者还是比较好玩的。
接下来 看下我写的五子棋程序
我们将它分为三个类
1.主窗体类
2.鼠标事件处理器
3.判断一方是否胜利
比较简单,望大家多多指正



  

1.主窗体类
/**************************************************************************************************************************************/
package cn.lantian.Fivezq;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class WuzqFrame extends JFrame {
/**
* 五子棋
*
* @兰天
*/
//入口主函数
public static void main(String[] args) {
WuzqFrame wzq = new WuzqFrame();
wzq.init();
}

public void init() {
chushi();// 初始化棋盘
//基本设置
this.setTitle("五子棋");
this.setSize(520, 535);
this.setDefaultCloseOperation(3);
//设置居中
this.setLocationRelativeTo(null);
//用户不可调整大小
this.setResizable(false);
this.setVisible(true);
//获取窗体的画布
Graphics g = this.getGraphics();
//定义鼠标监听类
wzqListener wzql = new wzqListener(g,this);
//添加鼠标监听
this.addMouseListener(wzql);
}
    //对窗体进行重绘
public void paint(Graphics g) {
//调用父类的方法,super
super.paint(g);
//画棋盘
for (int i = 0; i < n + 1; i++) {
g.drawLine(x + i * size, y, x + i * size, y + n * size);
}
for (int i = 0; i < n + 1; i++) {
g.drawLine(x, y + i * size, x + n * size, y + i * size);
}
for (int i=0;i<n;i++)
  for (int j=0;j<n;j++)
if (s[i][j]==1){
g.fillOval(x +i* WuzqFrame.size-WuzqFrame.size/2 , y + j*WuzqFrame.size-WuzqFrame.size/2 ,
WuzqFrame.qsize, WuzqFrame.qsize);
}else if (s[i][j]==-1){
//将颜色改为白色
g.setColor(Color.WHITE);
g.fillOval(x +i* WuzqFrame.size-WuzqFrame.size/2 , y + j*WuzqFrame.size-WuzqFrame.size/2 ,
WuzqFrame.qsize, WuzqFrame.qsize);
//定义黑色为初始色
g.setColor(Color.BLACK);
}


}

    //定义起始直线坐标
public static int x = 30, y = 50;
//棋子的多少及格子大小
public static int n = 15, size = 30, qsize = 30;
//定义一个数组来存储棋子
public static int[][] s = new int[n][n];
    //初始方法,数组全赋为0
public void chushi() {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
s[i][j] = 0;
}
}
/**************************************************************************************************************************************/




2.鼠标事件处理器
/**************************************************************************************************************************************/
package cn.lantian.Fivezq;


import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//棋盘鼠标监听器
public class wzqListener implements MouseListener {
private Graphics g;
//用来确定下什么棋
public static int t = 1;
private WuzqFrame wzq;
    //构造器,将画布传过来
public wzqListener(Graphics g,WuzqFrame wzq) {
this.g = g;
this.wzq = wzq;
}

public void mousePressed(MouseEvent e) {
//获得要下的棋子的行和列
int x1=Math.round((float) (e.getX() - WuzqFrame.x) / WuzqFrame.size);
int y1=Math.round((float) (e.getY() - WuzqFrame.y) / WuzqFrame.size);
//判断行列是否出界,及是否放了棋子
if(x1>=0&&x1<WuzqFrame.n&&y1>=0&&y1<WuzqFrame.n&&WuzqFrame.s[x1][y1]==0){
  //棋子放在棋盘上后,数组做相应标示
  WuzqFrame.s[x1][y1] = t;
  //重绘棋盘
  wzq.repaint();
  //调用QiziPd类中的方法,来判断输赢
  QiziPd.pd(t, x1, y1,g,wzq);
  //改变棋子颜色
  t = -t;
}
}

@Override
public void mouseClicked(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

}

}
/**************************************************************************************************************************************/







3.判断一方是否胜利
/**************************************************************************************************************************************/
package cn.lantian.Fivezq;

import java.awt.Graphics;

import javax.swing.JOptionPane;

//判断胜负
public class QiziPd {
// 将一些重要参数的值传过来
public static int[][] s = WuzqFrame.s;
private static int n = WuzqFrame.n;
// 构建两个移动数组(暂且这么说)
private static int[] a = { -1, -1, 0, 1, 1, 1, 0, -1 };
private static int[] b = { 0, 1, 1, 1, 0, -1, -1, -1 };

// 判断方法,z为棋子颜色的标志,x y 为下的棋子的行与列
public static void pd(int z, int x, int y, Graphics g, WuzqFrame wzq) {
// 四个方向横、竖、左斜、右斜
for (int i = 0; i < 4; i++) {
// 记录在一条直线上的棋子数(不包括下的棋子)
int temp = 0;
// 里面以棋子为界,又分两个方向
for (int j = 0; j < 2; j++) {
int x1 = x, y1 = y;
// 判断同一直线上的棋子数
while (temp < 4) {
// 算出那条直线上的棋子的坐标
x1 = x1 + a[i + 4 * j];
y1 = y1 + b[i + 4 * j];
// 如果在棋盘内,继续循环,否则退出循环
if (x1 < 0 || x1 >= n || y1 < 0 || y1 >= n)
break;
else {
// 如果这条直线上有自己颜色的棋子,则temp++,否则退出
if (s[x1][y1] == z) {
temp++;
} else
break;
}
}
// 如果连着的棋子数为4(没有包括自己,总数是五)
if (temp == 4) {
// 弹出谁赢了的提示框
if (z == 1) {
JOptionPane.showMessageDialog(null, "黑棋赢了,再来一盘吧!");
} else {
JOptionPane.showMessageDialog(null, "白棋赢了,再来一盘吧!");
}
//初始数组
wzq.chushi();
//重绘棋盘
wzq.repaint();
//先下的 棋子为黑子,t改为白子,后面的语句会改过来
wzqListener.t=-1;
break;
}
}
}

}

}
/**************************************************************************************************************************************/
  • 大小: 18.3 KB
分享到:
评论

相关推荐

    java五子棋人人对战可悔棋

    【Java五子棋人人对战可悔棋】是一款基于Java编程语言实现的两人对弈的五子棋游戏,允许玩家在走错棋步时进行悔棋操作,为玩家提供了更加自由的游戏体验。该项目由个人独立完成,并获得了老师的高度评价,成绩A+。...

    java开发的五子棋人人对战

    总结来说,"java开发的五子棋人人对战"项目是一个基础的Java GUI编程实践,涵盖了图形界面设计、事件处理和基本的游戏逻辑实现。虽然没有AI,但扩展到人机对战模式将是一个提升游戏体验的好方法,同时也对开发者提出...

    java实现五子棋人机智能对战/人人网络对战

    用Java实现的五子棋的对战小游戏,实现了人人网络对战,人机对战,拥有界面,在使用的时候记得将src下面的所有素材放到bin目录下方可正常运行,导入Eclipse即可运行。

    java实现的人人对战五子棋

    标题 "java实现的人人对战五子棋" 暗示了这是一个使用Java编程语言开发的五子棋游戏,允许两个玩家通过网络或同一设备进行对战。在五子棋游戏中,目标是先将五个棋子连成一线(水平、垂直或对角线)的玩家获胜。下面...

    Java 五子棋 人人对战

    【Java五子棋人人对战】是一个基于Java编程语言实现的简单桌面游戏,它允许两位玩家在同一设备上进行对弈。这个项目可能是为一个IT课程的实验报告而创建的,但与作者之前的作品相比,其功能可能有所简化,因为描述中...

    五子棋人人对战小游戏java代码

    【五子棋人人对战小游戏】是基于Java编程语言实现的一款经典桌面游戏,它通过简单的图形界面让两位玩家可以在线上或本地进行实时对战。这款游戏的代码结构清晰,易于理解,非常适合初学者学习和研究Java图形用户界面...

    java五子棋人人对战.rar

    Java五子棋人人对战程序是一款使用Java编程语言开发的桌面游戏应用,它实现了玩家与玩家之间的实时对弈。此程序具有丰富的功能,包括开始新游戏、重新开始、悔棋等,满足了用户在游戏过程中的多种需求。此外,它还...

    Java编程实现五子棋人人对战代码示例

    Java编程实现五子棋人人对战代码示例 本资源主要介绍了Java编程实现五子棋人人对战代码示例,具有一定借鉴价值,需要的朋友可以参考下。下面将详细讲解该示例的知识点。 一、Java基础知识 1. Java基本数据类型:...

    java五子棋的实现,实现人人对战,人机对战

    java五子棋的实现,适合学生的课程设计,希望能够帮到大家,实现人机对战,和人人对战功能模式,有时间统计

    五子棋 人人对战 人机对战

    本篇文章将围绕"五子棋 人人对战 人机对战"这一主题,详细解析其在软件开发中的实现原理和技术要点。 首先,我们要理解五子棋的基本规则:两位玩家轮流在棋盘上落子,先形成连续五个同色棋子的一方获胜。在电子游戏...

    wuziqi.rar_java 五子棋 人人对战_五子棋人人

    在本项目中,我们关注的是一个基于Java实现的五子棋游戏,专为"人人对战"模式设计。五子棋是一种古老的双人棋类游戏,目标是在棋盘上连成五个棋子以获胜。这个Java项目对于初学者来说特别有价值,因为它提供了简单...

    wuziqi.rar_java 五子棋_wuziqi_五子棋 java_五子棋 人人 对战

    【描述】"这是一个五子棋小代码,只有人人对战,没有智能." 这句话揭示了这个项目的特点:它的代码量不大,专注于提供两个人之间的人工对战功能,即玩家与玩家之间的实时对弈,而没有包含AI(人工智能)对战模式。...

    安卓五子棋人人对战

    【安卓五子棋人人对战】是一个专门为Android平台设计的双人对弈应用,它允许两位玩家在同一设备上进行实时的五子棋游戏。这款应用的核心特性是利用自定义View来构建游戏界面,以实现更加灵活和高效的游戏交互。下面...

    java五子棋(人机对战、人人对战)总共三个还有算法!

    【标题】中的“java五子棋(人机对战、人人对战)”指的是一个用Java编程语言开发的五子棋游戏,它包含了两种模式:人机对战和人人对战。在人机对战模式中,玩家可以与计算机进行对抗;在人人对战模式下,两个玩家...

    人人对战五子棋 java

    ### 人人对战五子棋 Java 程序解析 #### 概述 这段代码实现了一个简单的五子棋游戏,采用 Java 编程语言完成。它允许两名玩家在同一个计算机上进行对战,通过鼠标点击放置棋子。下面将详细分析代码中的关键部分及其...

    java可视化五子棋人人对弈

    在本项目"java可视化五子棋人人对弈"中,开发者使用Java编程语言构建了一个简单的双人对战五子棋游戏。以下是对该项目所涉及的关键知识点的详细解释: 1. **Java编程语言**:Java是一种跨平台、面向对象的编程语言...

    用Java编写的人人对战的五子棋

    【Java五子棋人人对战】项目是一个基于Java编程语言实现的简单对战型五子棋游戏。在本文中,我们将深入探讨这个项目的各个方面,包括它的核心概念、设计原理以及如何进行实际操作。 首先,我们要了解Java作为一种...

    五子棋的人人对战代码(仅在AVD上运行过)

    本文将详细讲解基于Java实现的五子棋人人对战代码的相关知识。对于初学者来说,这是一个很好的实践项目,能够帮助理解和应用基础的编程概念,尤其是针对游戏开发。 五子棋是一种双人对弈的策略棋类游戏,目标是先在...

    五子棋(人人对战) Java版

    五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。 棋具与围棋通用,...

    java swing 人机对战 五子棋

    主要是一个五子棋游戏,利用java swing技术编写,总共只有一个类,两个内部类。人机对战

Global site tag (gtag.js) - Google Analytics