Moderate 判断井字游戏的胜利 @CareerCup

原创 2013年12月02日 07:12:59

基于要查找的次数来决定是否要预处理。预处理方式按照3进制来做。

另外,检查是否赢了要判断横行,纵列,正反对角线



package Moderate;

/**
 * Design an algorithm to figure out if someone has won in a game of tic-tac-toe.

译文:

设计算法检查某人是否赢得了井字游戏。 
 *
 */
public class S17_2 {

	// 方法一:如果HasWon函数需要被频繁调用
	public static int convertBoardToInt(char[][] board) {
        int factor = 1;
        int sum = 0;
        for (int i = 0; i < board.length; i++) {
                for (int j = 0; j < board[i].length; j++) {
                        int v = 0;
                        switch(board[i][j]){
	                        case 'x':
	                        	v = 1;
	                        	break;
	                        case 'o':
	                        	v = 2;
	                        	break;
                        	default:
                        		v = 0;
                        }
                        
                        sum += v * factor;
                        factor *= 3;
                }
        }
        return sum;
	}
	
	
	// 方法二:如果HasWon函数只被调用一次或很少次
	public static char hasWon(char[][] board){
		int type = 0;
		int N = board.length;
		
		int i, j;
		
		// 对每一行都检查
		for(i=0; i<N; i++){
			if(board[i][0] != ' '){
				for(j=1; j<N; j++){
					if(board[i][j] != board[i][j-1]){
						break;
					}
				}
				if(j == N){
					return board[i][0];
				}
			}
		}
		
		
		// 对每一列都检查
		for(j=0; j<N; j++){
			if(board[0][j] != ' '){
				for(i=1; i<N; i++){
					if(board[i][j] != board[i-1][j]){
						break;
					}
				}
				if(i == N){
					return board[0][j];
				}
			}
		}
		
		// 正对角线检查(左上到右下)
		if(board[0][0] != ' '){
			for(i=1; i<N; i++){
				if(board[i][i] != board[i-1][i-1]){
					break;
				}
			}
			if(i == N){
				return board[0][0];
			}
		}
		
		// 逆对角线检查(左下到右上)
		if(board[N-1][0] != ' '){
			for(i=1; i<N; i++){
				if(board[N-i-1][i] != board[N-i][i-1]){
					break;
				}
			}
			if(i == N){
				return board[N-1][0];
			}
		}
		
		return ' ';
	}



	public static void main(String[] args) {
	        char[][] board = {
	                        {'x', 'x', 'o'},
	                        {' ', 'x', ' '},
	                        {' ', ' ', 'x'}};
	        
	        int v = convertBoardToInt(board);
	        System.out.println(v);
	        
	        char result = hasWon(board);
	        if(result == ' '){
	        	System.out.println("No one won!");
	        }else{
	        	System.out.println(result + " has won");
	        }
	        
	}

}


mfc 井字游戏程序分析,描述整个程序处理过程。

左键单击画X,右键单击画O,X、O轮流画!出现三个连续的图形就是赢!或者画完所有矩形区没有输赢就是平局!(这是单人游戏还是双人游戏?例子而已) 先看程序中的数据:9个矩形和矩形状态 一个矩形三种状态...
  • jingmiaa
  • jingmiaa
  • 2016年03月02日 18:37
  • 710

程序员面试金典——解题总结: 9.17中等难题 17.2判断井字游戏中某个玩家是否赢了游戏

#include #include #include using namespace std; /* 问题:设计一个算法,判断玩家是否赢了井字游戏 分析:首先井字游戏是跟五子棋类似,任意连线...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2017年01月16日 00:13
  • 251

井字棋游戏代码Java

井字棋:读入一个整数,表示井字棋棋盘的边长。判断其中是否存在某一方获胜,获胜的条件是存在整行或整列或整条对角线或整条反对角线上是相同的棋子。如果存在,则输出代表获胜一方字母:X或O(大写字母X或O);...
  • qq_32855219
  • qq_32855219
  • 2016年11月23日 22:47
  • 2276

jquery实现井字格游戏

tic-tac-toe body{ color:#FA6766; font-family:Tre...
  • zhou_yujia
  • zhou_yujia
  • 2016年06月09日 21:41
  • 551

C++井字棋游戏,DOS界面版

据说有一个能保证不败的算法,明天看看先再写个PVC版的。 正题,今天无聊写了个井字棋游戏,顺便逐渐让自己习惯良好的代码风格,放上来给新手学习学习。 jzq2.cpp /* N字棋游戏PVP版,DOS...
  • guang_jing
  • guang_jing
  • 2014年05月25日 00:34
  • 3345

用 Python 做个简单的井字游戏

在这个教程中,我将展示如何利用Python来做一个井字游戏。这将包括函数、列表、if语句、while循环、for循环以及错误处理等等。   首先,我们将创建两个函数,第一个函数将会打印出井字游戏...
  • walter_chan
  • walter_chan
  • 2015年01月18日 13:41
  • 450

Keener_Tic_Tac_Toe(井字棋游戏)代码(c语言)

遇到的问题: 1.中间有需要清楚键盘缓冲区,具体(?) 2.number char型,强制int型转换是利用ASCII码,相差48. 3.string型c++支持,c并没有,利用char型字符数...
  • LNZ001
  • LNZ001
  • 2017年01月29日 22:47
  • 614

『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】

一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏。此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎。...
  • yorhomwang
  • yorhomwang
  • 2013年03月14日 22:07
  • 33280

【数字图像处理】带AI的井字棋游戏

源代码下载:http://download.csdn.net/detail/jsgaobiao/9464292 老师看了Alpha狗和李世石的比赛,一拍大腿就把作业题给改了。。。也是醉 ...
  • jsgaobiao
  • jsgaobiao
  • 2016年03月17日 13:55
  • 2008

[JavaScript]陈年老代码:自带AI的井字棋游戏

翻硬盘的时候,翻出来一份不知道什么时候写的井字棋小游戏。自带简单AI,玩了一下,感觉还行。想了想,好像是以前上什么课时的时候偷偷在桌底下写的。...
  • Shenpibaipao
  • Shenpibaipao
  • 2017年12月03日 22:48
  • 492
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Moderate 判断井字游戏的胜利 @CareerCup
举报原因:
原因补充:

(最多只允许输入30个字)