`

五子棋——人人对战

 
阅读更多
这个五子棋游戏目前实现了人人对战,其中包含的功能有开始、悔棋、和棋,以及提示当前参与者应该下棋的颜色、判断输赢。(附件中附有jar包)下面我按照实现过程中遇到的问题来介绍实现的方法。
我觉得人人对战实现的关键应该是棋子的类的建立,一旦棋子的属性建立完全,那么后续步骤都显得很简便了。棋子的属性设置如下
 private int a;//棋子横坐标
	private int b;//棋子纵坐标
	private Color pieceColor;//棋子颜色
	private int horizontal;//棋子所在行数
	private int vertical;//棋子所在列数
	

一、棋局的暂时保存问题,即活动窗体后,棋盘上的棋子依然存在。
   整体思路是通过重写paint(Graphics g)方法来实现重绘。但问题是在不同时刻,窗体中棋子的状态都是不一致的,怎么把这些棋子保存下来呢?我使用集合来对元素进行保存。这时不仅要保存棋子的坐标,也要保存棋子所在的行数、列数、以及颜色,以便后来的操作和判断。
   代码如下
  Piece piece=new Piece();
		piece.setA(x1);//棋子的横坐标
		piece.setB(y1);//棋子的纵坐标
		piece.setRow(y1/unitHeight); //棋子所在列数
		piece.setColum(x1/unitWidth);//棋子所在行数
		
		//绘制棋子
		if(ifexist[piece.getRow()][piece.getColum()]==0){//判断当前位置是否已有棋子存在
			g.fillOval(x1, y1, size, size);
			ifexist[piece.getRow()][piece.getColum()]=1;
			whichColor[piece.getRow()][piece.getColum()]=g.getColor();
			piece.setPieceColor(g.getColor());
			pieceList.add(piece);
		}

二、判断输赢
   判断输赢即是每次落下棋子后,看四个方向上有没有连着的五个颜色一样的棋子。这个过程需要用到循环,代码如下
 
   int horizontal=p.getRow();
		 int vertical=p.getColum();
	    	//判断横行
	    pieceCount=0;
	    for(int c=vertical;c<columSNum+1;c++){
			   if(ifexist[horizontal][c]==1&&whichColor[horizontal][c]==currentColor){
				   pieceCount++;
			       result();
			   }else break;
		   }
		for(int r=vertical-1;r>=0;r--){
			   if(ifexist[horizontal][r]==1&&whichColor[horizontal][r]==currentColor){
				   pieceCount++;
				   result();
			   }else break;
		   }
	    		
		   //判断竖行
	    pieceCount=0;
	    for(int r=horizontal;r<columSNum+1;r++){
    		if(ifexist[r][vertical]==1&&whichColor[r][vertical]==currentColor){
    			pieceCount++;
    			result();
    		}else break;
    	}
		for(int c=horizontal-1;c>=0;c--){
    		if(ifexist[c][vertical]==1&&whichColor[c][vertical]==currentColor){
    			pieceCount++;
    			result();
    		}else break;
    	}
	    		
	    	//判断斜对角线(左下到右上)
	    pieceCount=0;
	    for(int r=horizontal,c=vertical;r>=0&&c<columSNum+1;r--,c++){
			if(ifexist[r][c]==1&&whichColor[r][c]==currentColor){
				pieceCount++;
				result();
			}else break;
		}
		for(int m=horizontal+1,n=vertical-1;m<rowSNum+1&&n>=0;m++,n--){
			if(ifexist[m][n]==1&&whichColor[m][n]==currentColor){
				pieceCount++;
				result();
			}else break;
		}
	    		
	    	//判断斜对角线(左上到右下)
	    pieceCount=0;
	    for(int r=horizontal,c=vertical;r>=0&&c>=0;r--,c--){
			if(ifexist[r][c]==1&&whichColor[r][c]==currentColor){
				pieceCount++;
				result();
			}else break;
		}
		for(int m=horizontal+1,n=vertical+1;m<rowSNum+1&&n<columSNum+1;m++,n++){
			if(ifexist[m][n]==1&&whichColor[m][n]==currentColor){
				pieceCount++;
				result();
			}else break;
		}
分享到:
评论

相关推荐

    基于安卓的五子棋游戏——人机对战,无联网人人对战.zip

    【标题】"基于安卓的五子棋游戏——人机对战,无联网人人对战.zip" 描述了一个在Android平台上实现的五子棋游戏应用,它具有两种模式:人机对战和双人对战。人机对战模式通常涉及到人工智能算法的应用,使得计算机...

    五子棋(人人和人机两种对弈模式)

    本文将深入探讨这款程序的两大核心功能——人人对弈模式和人机对弈模式,并分析其背后的智能算法。 首先,人人对弈模式是五子棋游戏中最基本的功能,它允许两位玩家在同一平台上进行实时对战。在MFC框架下,开发者...

    基于安卓的五子棋de游戏设计——论文.doc

    "基于安卓的五子棋游戏设计" 本文主要探讨了基于安卓的五子棋游戏设计,通过面向对象的程序开发语言Eclipse作为开发...关键词:Android、五子棋游戏、Eclipse、人机对战、人人对战、算法、线程、机器人、生命周期。

    五子棋代码

    《五子棋代码详解——基于C#的人机与人人对战模式》 五子棋,又称连珠,是一种流传广泛的双人对弈策略游戏。它简单易懂,但蕴含着丰富的策略性,深受广大玩家喜爱。本文将深入探讨用C#编程语言实现的五子棋代码,...

    五子棋源码及程序

    在这个项目中,我们将探讨如何利用Microsoft Foundation Classes (MFC)框架来实现一个功能完善的五子棋程序,包括人机对战、人人对战模式,以及棋局的保存和载入功能。 一、MFC基础与五子棋界面设计 MFC是微软提供...

    安卓小游戏五子棋源码

    “人人对战”意味着游戏支持两个玩家通过同一设备进行面对面的竞技;而“人机对战”则表示游戏还可能包含一个AI对手,允许单个玩家与计算机进行游戏。这表明源码中可能包括了玩家输入处理、游戏逻辑计算(包括检查...

    五子棋课程设计(人机对话,人人一起联合。)

    【五子棋课程设计——人机对话与网络对战实现详解】 在计算机科学与信息技术领域,游戏编程是一种常见的课程设计项目,它既能锻炼学生的逻辑思维能力,又能让他们掌握实际的编程技能。本项目以“五子棋”为背景,...

    一个简单的五子棋游戏

    本篇文章将深入探讨如何使用VC++编程语言来开发一个简单的人机对战及人人对战的五子棋游戏。 首先,我们要理解五子棋的基本规则。五子棋是两人对弈的棋类游戏,黑白双方轮流在棋盘上落子,目标是形成任意方向(横向...

    w.rar_五子棋 汇编_五子棋汇编_汇编五子棋_汇编程序游戏

    当我们将五子棋与计算机编程语言——汇编结合时,便能创建出一款人机对战或人人对战的游戏程序。本文将围绕“w.rar”压缩包中的五子棋汇编程序进行深入解析,探讨如何通过汇编语言实现五子棋的逻辑。 汇编语言,...

    于基c#的五子棋游戏的设计与实现设计--毕业设计.doc

    本软件的总体架构如图 2.1所示,包括人机对战、人人对战、主界面、游戏控制、游戏模式、重新开始、退出、声音控制、悔棋、开始等模块。 五子棋设计说明 ### 主要成员变量说明 1. 选择游戏模式标志——m_renren:...

    毕业论文--于基c#的五子棋游戏的设计与实现设计.doc

    软件的架构采用了一个清晰的人机对战和人人对战模式。主界面提供游戏控制选项,包括游戏模式选择、重新开始、退出、声音控制以及悔棋功能。如图2.1所示,软件结构设计直观,便于用户操作。 3. 五子棋设计说明 3.1 ...

    基于c#的五子棋游戏的设计与实现.doc

    2) PutChess:在指定位置放下棋子,更新棋盘状态,并根据游戏模式(人机对战或人人对战)决定是否需要进行下一步操作。 3) Backtrack:回溯函数,撤销上一步棋,恢复棋盘到上一步的状态。 4) AI_Move:人工智能的...

    java五子棋

    - **游戏模式**:支持两种游戏模式——人机对战和人人对战。 - **棋盘尺寸**:提供了三种不同的棋盘尺寸供玩家选择。 - **界面风格**:允许玩家更改应用程序的外观风格,包括Metal、Motif和Windows样式。 ### 5. ...

    五子棋程序设计

    - **玩家需求**:游戏应具备基本的人人对战功能,并具有友好的用户界面,让玩家在游戏中感到舒适。 - **游戏规则**:五子棋采用标准规则,即任意一方在横向、纵向或斜向上形成五个同色棋子连成一线时,即赢得比赛。 ...

    Connect-Five.rar_connect

    在“Connect-Five.rar_connect”这个压缩包中,包含了一个五子棋对战程序,它不仅支持人人对战模式,还提供了人机对战的功能,为初学者提供了绝佳的练习平台。本文将深入探讨五子棋的基本规则、人机对战的实现原理...

    基于c#的五子棋游戏的设计与实现-学位论文.doc

    如图2.1所示,软件包含人机对战、人人对战、游戏控制、游戏模式选择、重新开始、退出、声音控制和悔棋等功能。这种分层设计有利于代码的组织和维护,同时也提高了系统的可扩展性和可复用性。 【主要成员变量】 1) `...

    mfc-wuziqi

    本文将详细探讨如何使用Microsoft Foundation Classes (MFC)库来创建一个简单的五子棋小游戏,包括游戏的基本功能如人机对战、人人对战以及悔棋等。 首先,MFC是微软为Windows平台提供的C++类库,它封装了Windows ...

    基于C++高级语言程序实验报告.docx

    本次实验的主要任务是开发一个图形化的五子棋游戏,包括人机对战和人人对战两种模式。游戏的具体功能如下: 1. **构建棋盘**:实现一个标准的五子棋棋盘界面,允许玩家通过鼠标点击放置棋子。 2. **胜负判定**:当...

Global site tag (gtag.js) - Google Analytics