用到的知识
1.窗体界面
JFrame窗体的基本设置
2.事件机制
给窗体位置坐标加监听器,实现下棋的功能
3.图形的重绘,由于窗体显示,窗体会重绘两次,而画上去图像如果不加重绘方法,图像就不会显现,如最小化界面,移动界面等等,每移动一次,界面都是有系统调用重绘方法重新画界面,而上面的图像如果不定义重绘方法就不会再出现
4.数组你还没学过数组
神奇的数组,此小游戏中,用数组储存下过的旗子,黑白棋有标志分开,可以用于判断该交叉点是否有下过棋子,判断是否五子相连,数组用在此处很恰当,
package chess; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JFrame; public class ChessFrame extends JFrame{ /** * @param args */ //入口函数 public static void main(String[] args) { // TODO Auto-generated method stub ChessFrame frame=new ChessFrame(); frame.initGUI(); } //定义初始化界面方法 public void initGUI(){ this.setSize(new Dimension(580,600)); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); this.setVisible(true); //再创体显现之后,取得窗体画布图像 Graphics g=this.getGraphics(); //实例化处理器类 ChessMouseListener cml=new ChessMouseListener(g); //给窗体加上监听器 this.addMouseListener(cml); } //棋盘的重绘 public void paint(Graphics g){ //横线 for(int i=0;i<Fig.LINE_H;i++){ g.drawLine(Fig.X, Fig.Y+i*Fig.SIZE, Fig.X+Fig.SIZE*(Fig.LINE_H-1), Fig.Y+i*Fig.SIZE); } //竖线 for(int i=0;i<Fig.LINE_V;i++){ g.drawLine(Fig.X+i*Fig.SIZE, Fig.Y, Fig.X+i*Fig.SIZE, Fig.Y+Fig.SIZE*(Fig.LINE_V-1)); } /****************旗子的重绘************************/ for(int n=0;n<Fig.arr.length;n++){ for(int m=0;m<Fig.arr[n].length;m++){ //计算交叉点坐标 int x=Fig.X+n*Fig.SIZE; int y=Fig.Y+m*Fig.SIZE; if(Fig.arr[n][m]==1){ g.setColor(Color.BLACK); g.fillOval(x-Fig.SIZE/2, y-Fig.SIZE/2, Fig.SIZE, Fig.SIZE); }else if(Fig.arr[n][m]==-1){ g.setColor(Color.WHITE); g.fillOval(x-Fig.SIZE/2, y-Fig.SIZE/2, Fig.SIZE, Fig.SIZE); } } } } } package chess; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class ChessMouseListener extends MouseAdapter{ //定义整形属性获取鼠标点击坐标 private int x,y; //定义绘制棋子的属性 private Graphics g; //定义黑白棋的标志值 private int state=1; /** * * 构造方法,赋给属性的参数名 */ //覆写父类方法 public void mouseClicked(MouseEvent e){ //取得点击的坐标值 x=e.getX(); y=e.getY(); //循环进行下棋 for(int i=0;i<Fig.LINE_H;i++){ for(int j=0;j<Fig.LINE_V;j++){ if(Fig.arr[i][j]==0){ //判断交叉点的坐标 int r=Fig.X+Fig.SIZE*i; int c=Fig.Y+Fig.SIZE*j; //计算出鼠标点击位置与交叉点的绝对值 int tempX=Math.abs(r-x); int tempY=Math.abs(c-y); if(tempX<Fig.SIZE/2&&tempY<Fig.SIZE/2){ x=r; y=c; // }else if(tempX<Fig.SIZE/2&&tempY>Fig.SIZE/2){ // x=r; // y=c+Fig.SIZE; // }else if(tempX>Fig.SIZE/2&&tempY<Fig.SIZE/2){ // x=r+Fig.SIZE; // y=c; // }else if(tempX>Fig.SIZE/2&&tempY>Fig.SIZE/2){ // x=r+Fig.SIZE; // y=c+Fig.SIZE; // } //将旗子储存在数组中 Fig.arr[i][j]=state; //判断是否下过棋子 if(state==1){ g.setColor(Color.BLACK); g.fillOval(x-Fig.SIZE/2, y-Fig.SIZE/2, Fig.SIZE, Fig.SIZE); state=-1; }else { g.setColor(Color.WHITE); g.fillOval(x-Fig.SIZE/2, y-Fig.SIZE/2, Fig.SIZE, Fig.SIZE); state=1; } Win win=new Win(); boolean bool=win.validate(i, j); if(bool){ if(state==1) System.out.println("白棋胜利"); if(state==-1) System.out.println("黑棋胜利"); } return; } } } } } public ChessMouseListener(Graphics g){ this.g=g; } } package chess; public interface Fig { //起始位置X public static final int X=35; //起始位置Y public static final int Y=50; //横线 public static final int LINE_H=15; //竖线 public static final int LINE_V=15; //棋子大小 public static final int CHESS=35; //网格大小 public static final int SIZE=35; //存储棋子的数组 public static final int arr[][]=new int[LINE_H][LINE_V]; } package chess; public class Win { int count=1; public boolean validate(int r,int c){ boolean state=false; //是否五子相连 // if(winH(r,c)>=5){ // //如相连,返回真值 // state=true; // }else{ // state=false; // } // return state; // if(winH(r,c)>=5||winV(r,c)>=5||winR(r,c)>=5||winL(r,c)>=5){ state=true; } return state; } //横向相连的个数 public int winH(int r,int c){ for(int i=r+1;i<Fig.arr.length;i++){ if(Fig.arr[i][c]==Fig.arr[r][c]){ count++; }else { break; } } for(int i1=r-1;i1>=0;i1--){ if(Fig.arr[i1][c]==Fig.arr[r][c]){ count++; }else { break; } } // System.out.println("棋相连个数"+count); return count; } //竖行相连的个数 public int winV(int r,int c){ // int count=1; for(int i=c+1;i<Fig.arr.length;i++){ if(Fig.arr[r][i]==Fig.arr[r][c]){ count++; }else { break; } } for(int i1=c-1;i1>=0;i1--){ if(Fig.arr[r][i1]==Fig.arr[r][c]){ count++; }else { break; } } return count; } //斜右 public int winR(int r,int c){ // int count=1; // int i,j; for(int i=r+1, j=c+1;i<Fig.arr.length&&j<Fig.arr[i].length;i++,j++){ if(Fig.arr[i][j]==Fig.arr[r][c]){ count++; }else { break; } } for(int i=r-1,j=c-1;i>=0&&j>=0;i--,j--){ if(Fig.arr[i][j]==Fig.arr[r][c]){ count++; }else { break; } } return count; } public int winL(int r,int c){ // int count=1; int i,j; for( i=r+1, j=c-1;i<Fig.arr.length&&j>=0;i++,j--){ if(Fig.arr[i][j]==Fig.arr[r][c]){ count++; }else { break; } } for(i=r-1,j=c+1;i>=0&&j<Fig.arr[i].length;i--,j++){ if(Fig.arr[i][j]==Fig.arr[r][c]){ count++; }else { break; } } return count; } }
相关推荐
这个小游戏无需安装任何客户端,只需将压缩包解压后在浏览器中打开,就能立即体验到五子棋的乐趣。 首先,HTML在这里起到了页面结构的作用。HTML(HyperText Markup Language)是网页内容的基础框架,定义了页面的...
【JAVA小游戏---五子棋】 本项目是一款基于Java编程语言实现的五子棋游戏,具有完整的功能、严格的输入控制和用户友好的操作界面。通过这个项目,我们可以深入了解Java编程在游戏开发中的应用,以及如何利用面向...
QT小游戏--五子棋.zip是一个基于QT框架开发的五子棋游戏项目。QT是一个流行的开源C++图形用户界面应用程序开发框架,它提供了丰富的库和工具,使得开发者可以方便地创建跨平台的应用程序,包括桌面应用、移动应用...
五子棋小游戏源码+课设报告(高分项目)Java课程设计-五子棋小游戏源码+课设报告(高分项目)Java课程设计-五子棋小游戏源码+课设报告(高分项目)Java课程设计-五子棋小游戏源码+课设报告(高分项目)Java课程设计-...
二、五子棋下棋过程1、在菜单界面选择对战方式、进行上一局或退出游戏2、绘制棋盘、棋子3、执黑子的玩家先落子,然后双方轮流落子4、判断胜负或平局5、退出游戏三、功能设计1、初始化棋子2、初始化棋盘3、判断胜负4...
《Swift编程实现:五子棋小游戏详解》 五子棋是一种简单却富有策略性的双人对弈游戏,深受玩家喜爱。在当今数字化时代,利用编程语言将这种经典游戏搬到电脑屏幕上,为玩家提供了新的娱乐方式。本文将详细介绍如何...
总结来说,Python开发五子棋小游戏是一个很好的学习项目,它涵盖了面向对象编程、用户交互、图形界面设计以及基础的AI算法。通过这个项目,你可以深入理解Python的强大功能,同时享受编程带来的乐趣。无论你是Python...
【标题】"平平科技工作室-小游戏-HTML-AI五子棋" 提供的是一个基于HTML技术开发的AI五子棋游戏。这个小游戏是平平科技工作室的作品,它结合了HTML语言的力量,让玩家能够在网页上体验到与人工智能对弈的乐趣。 ...
【Android小游戏开发——五子棋】 五子棋是一款广受欢迎的智力游戏,它简单易懂,但策略丰富,适合各年龄段玩家。在这个项目中,我们将会探讨如何使用Android Studio开发一款五子棋的小游戏。 首先,Android ...
《五子棋——H5游戏开发详解》 五子棋是一种深受人们喜爱的传统棋类游戏,如今,随着HTML5技术的发展,我们可以在...在不断发展的Web技术背景下,H5小游戏如五子棋的开发,为我们展示了互联网互动娱乐的无限可能性。
在本文中,我们将深入探讨如何使用C#编程语言来创建一个五子棋小游戏。C#是一种面向对象的、类型安全的、高性能的语言,由微软公司开发,广泛应用于Windows平台的应用程序开发,包括游戏开发。 首先,我们要理解...
总的来说,这个五子棋项目为Java初学者提供了一个很好的实践平台,涵盖了面向对象编程、图形用户界面设计、游戏逻辑实现以及基本的AI算法等多个方面。通过学习和分析这个项目,不仅可以提升Java编程技能,也能理解...
《Python编程实现五子棋游戏》 五子棋,又称为连珠,是一种深受人们喜爱的双人对弈策略游戏。在这个项目中,我们将探讨如何使用Python编程语言来实现一个五子棋游戏。Python因其简洁易读的语法和丰富的库支持,成为...
【JavaGUI小游戏-五子棋】是一个利用Java编程语言实现的图形用户界面(GUI)应用程序,它允许两位玩家在屏幕上进行五子棋游戏对战。这个项目主要涉及到以下几个核心的Java知识点: 1. **Java GUI**:Java GUI是Java...
将双人五子棋这样的小游戏部署在NAS上的WebStation,可以利用NAS的计算资源和网络服务,为用户提供一个便捷的游戏平台。 WebStation是许多NAS设备上预装的一款应用,它充当了一个Web服务器的角色。通过WebStation,...
总的来说,五子棋游戏的Python源码是一个很好的学习项目,它涵盖了游戏开发的基础元素,包括图形界面、用户交互、游戏逻辑和基本的AI算法。通过理解和修改这个源码,开发者不仅可以提升Python编程技巧,还能深入理解...
【五子棋小游戏--基于Java平台】是一款在Java环境下开发的简单双人及人机对战游戏。这个项目展示了如何利用Java编程语言实现一个交互性强、逻辑清晰的棋类游戏。下面将详细介绍该项目中的关键知识点。 1. **Java...
【Qt五子棋小游戏——深度解析】 在编程领域,游戏开发是吸引众多爱好者的一大主题,而使用Qt框架制作五子棋小游戏则是一个很好的实践项目。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动以及嵌入式系统...
HTML5小游戏——五子棋是一种基于网页的交互式游戏,利用了HTML5的先进技术,特别是Canvas元素和JavaScript编程语言来实现。在这个游戏中,用户可以与计算机进行对弈,享受五子棋的乐趣。以下是对这个小游戏涉及到的...
C语言源码小游戏-CMD窗口_Five-in-a-row五子棋.zip 五子棋(Five-in-a-row) FIR: 19行, 实现基本功能 AIv1: 30行, 增加自动下子功能 AIv1(text): 34行, 去闪烁&打印评估分 AIv1.1: 34行, 优化界面