`
feng1990liu
  • 浏览: 8544 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

界面小游戏--五子棋

阅读更多

用到的知识

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在这里起到了页面结构的作用。HTML(HyperText Markup Language)是网页内容的基础框架,定义了页面的...

    JAVA小游戏---五子棋

    【JAVA小游戏---五子棋】 本项目是一款基于Java编程语言实现的五子棋游戏,具有完整的功能、严格的输入控制和用户友好的操作界面。通过这个项目,我们可以深入了解Java编程在游戏开发中的应用,以及如何利用面向...

    QT小游戏--五子棋.zip

    QT小游戏--五子棋.zip是一个基于QT框架开发的五子棋游戏项目。QT是一个流行的开源C++图形用户界面应用程序开发框架,它提供了丰富的库和工具,使得开发者可以方便地创建跨平台的应用程序,包括桌面应用、移动应用...

    Java课程设计-五子棋小游戏源码+课设报告(高分项目)

    五子棋小游戏源码+课设报告(高分项目)Java课程设计-五子棋小游戏源码+课设报告(高分项目)Java课程设计-五子棋小游戏源码+课设报告(高分项目)Java课程设计-五子棋小游戏源码+课设报告(高分项目)Java课程设计-...

    小游戏-c语言小游戏-五子棋

    二、五子棋下棋过程1、在菜单界面选择对战方式、进行上一局或退出游戏2、绘制棋盘、棋子3、执黑子的玩家先落子,然后双方轮流落子4、判断胜负或平局5、退出游戏三、功能设计1、初始化棋子2、初始化棋盘3、判断胜负4...

    小游戏-五子棋

    《Swift编程实现:五子棋小游戏详解》 五子棋是一种简单却富有策略性的双人对弈游戏,深受玩家喜爱。在当今数字化时代,利用编程语言将这种经典游戏搬到电脑屏幕上,为玩家提供了新的娱乐方式。本文将详细介绍如何...

    小游戏-使用Python开发的五子棋小游戏-Gomoku.zip

    总结来说,Python开发五子棋小游戏是一个很好的学习项目,它涵盖了面向对象编程、用户交互、图形界面设计以及基础的AI算法。通过这个项目,你可以深入理解Python的强大功能,同时享受编程带来的乐趣。无论你是Python...

    平平科技工作室-小游戏-HTML-AI五子棋

    【标题】"平平科技工作室-小游戏-HTML-AI五子棋" 提供的是一个基于HTML技术开发的AI五子棋游戏。这个小游戏是平平科技工作室的作品,它结合了HTML语言的力量,让玩家能够在网页上体验到与人工智能对弈的乐趣。 ...

    Android小游戏-五子棋Android studio (含apk文件)

    【Android小游戏开发——五子棋】 五子棋是一款广受欢迎的智力游戏,它简单易懂,但策略丰富,适合各年龄段玩家。在这个项目中,我们将会探讨如何使用Android Studio开发一款五子棋的小游戏。 首先,Android ...

    h5小游戏-五子棋.rar_H5游戏_h5五子棋_h5小游戏_五子棋_五子棋 h5

    《五子棋——H5游戏开发详解》 五子棋是一种深受人们喜爱的传统棋类游戏,如今,随着HTML5技术的发展,我们可以在...在不断发展的Web技术背景下,H5小游戏如五子棋的开发,为我们展示了互联网互动娱乐的无限可能性。

    c# 编写的小游戏--五子棋

    在本文中,我们将深入探讨如何使用C#编程语言来创建一个五子棋小游戏。C#是一种面向对象的、类型安全的、高性能的语言,由微软公司开发,广泛应用于Windows平台的应用程序开发,包括游戏开发。 首先,我们要理解...

    用Java开发的小游戏--五子棋

    总的来说,这个五子棋项目为Java初学者提供了一个很好的实践平台,涵盖了面向对象编程、图形用户界面设计、游戏逻辑实现以及基本的AI算法等多个方面。通过学习和分析这个项目,不仅可以提升Java编程技能,也能理解...

    python小游戏-五子棋-Gomoku.7z

    《Python编程实现五子棋游戏》 五子棋,又称为连珠,是一种深受人们喜爱的双人对弈策略游戏。在这个项目中,我们将探讨如何使用Python编程语言来实现一个五子棋游戏。Python因其简洁易读的语法和丰富的库支持,成为...

    JavaGUI小游戏-五子棋

    【JavaGUI小游戏-五子棋】是一个利用Java编程语言实现的图形用户界面(GUI)应用程序,它允许两位玩家在屏幕上进行五子棋游戏对战。这个项目主要涉及到以下几个核心的Java知识点: 1. **Java GUI**:Java GUI是Java...

    双人五子棋-小游戏-NAS-WebStation-HTML5

    将双人五子棋这样的小游戏部署在NAS上的WebStation,可以利用NAS的计算资源和网络服务,为用户提供一个便捷的游戏平台。 WebStation是许多NAS设备上预装的一款应用,它充当了一个Web服务器的角色。通过WebStation,...

    经典小游戏 - 五子棋完整源码

    总的来说,五子棋游戏的Python源码是一个很好的学习项目,它涵盖了游戏开发的基础元素,包括图形界面、用户交互、游戏逻辑和基本的AI算法。通过理解和修改这个源码,开发者不仅可以提升Python编程技巧,还能深入理解...

    五子棋小游戏--基于java平台

    【五子棋小游戏--基于Java平台】是一款在Java环境下开发的简单双人及人机对战游戏。这个项目展示了如何利用Java编程语言实现一个交互性强、逻辑清晰的棋类游戏。下面将详细介绍该项目中的关键知识点。 1. **Java...

    qt五子棋小游戏-(带源码)

    【Qt五子棋小游戏——深度解析】 在编程领域,游戏开发是吸引众多爱好者的一大主题,而使用Qt框架制作五子棋小游戏则是一个很好的实践项目。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动以及嵌入式系统...

    HTML5小游戏-五子棋

    HTML5小游戏——五子棋是一种基于网页的交互式游戏,利用了HTML5的先进技术,特别是Canvas元素和JavaScript编程语言来实现。在这个游戏中,用户可以与计算机进行对弈,享受五子棋的乐趣。以下是对这个小游戏涉及到的...

    C语言源码小游戏-CMD窗口_Five-in-a-row五子棋.zip

    C语言源码小游戏-CMD窗口_Five-in-a-row五子棋.zip 五子棋(Five-in-a-row) FIR: 19行, 实现基本功能 AIv1: 30行, 增加自动下子功能 AIv1(text): 34行, 去闪烁&打印评估分 AIv1.1: 34行, 优化界面

Global site tag (gtag.js) - Google Analytics