03-02自底向上风格_模拟游戏

模拟游戏

模拟井字棋游戏

九个格子中双方轮流落子。

其中一方画x符号,另一方画o符号。

开始时,9个格子都是空的。

程序显示当前局面,提示某一方输入落子位置,然后显示局面,再提示另一方。

当某方棋子连成直线,该方获胜!

例如:

初始:

_ _ _

_ _ _

_ _ _

o 输入位置: 1,1

o _ _

_ _ _

_ _ _

x 输入位置: 2,2

o _ _

_ x _

_ _ _

当某一方出现了3个棋子连成直线或对角线,则该方获胜

标准答案:

import java.util.*; 

class MyChess
{
	private char[][] data;  // 棋局
	private boolean side;  // 轮到哪方走棋 true: o方,false: x方
	private static Scanner scan = new Scanner(System.in);

	public MyChess()
	{
		data = new char[3][3];
		side = true;
	}

	public void show()
	{
		for(int i=0; i<3; i++)
		{
			for(int j=0; j<3; j++)
			{
				if(data[i][j]==0)
					System.out.print(‘_‘);
				else
					System.out.print(data[i][j]);

				System.out.print(" ");
			}
			System.out.println();
		}
	}

	public boolean isEnd()
	{
		//检查是否已经分出胜负
		if(judge()>0) return true;

		// 检查是否还能走下去
		for(int i=0; i<3; i++)
		for(int j=0; j<3; j++)
		{
			if(data[i][j]==0) return false;
		}

		return true;
	}

	// 胜负裁判
	private int judge()
	{
		// 检测横线
		for(int k=0; k<3; k++)
		{
			if(data[k][0] == data[k][1] && data[k][0] == data[k][2])
			{
				if(data[k][0]==‘o‘) return 1;  // o 方胜利
				if(data[k][0]==‘x‘) return 2;  // x 方胜利
			}
		}

		// 检测竖线
		for(int k=0; k<3; k++)
		{
			if(data[0][k] == data[1][k] && data[0][k] == data[2][k])
			{
				if(data[0][k]==‘o‘) return 1;  // o 方胜利
				if(data[0][k]==‘x‘) return 2;  // x 方胜利
			}
		}

		// 检查斜线
		if(data[0][0]==data[1][1] && data[0][0]==data[2][2])
		{
			if(data[0][0]==‘o‘) return 1;  // o 方胜利
			if(data[0][0]==‘x‘) return 2;  // x 方胜利
		}
		if(data[0][2]==data[1][1] && data[0][2]==data[2][0])
		{
			if(data[0][2]==‘o‘) return 1;  // o 方胜利
			if(data[0][2]==‘x‘) return 2;  // x 方胜利
		}

		return 0;
	}

	// 显示比赛结果
	public void showResult()
	{
		switch(judge())
		{
			case 0:
				System.out.println("平局!");
				break;
			case 1:
				System.out.println(" o 方胜利!");
				break;
			case 2:
				System.out.println(" x 方胜利!");
				break;
		}
	}

	public void play()
	{
		for(;;)
		{
			char side_char = side? ‘o‘ : ‘x‘;

			System.out.print( " " + side_char + " 请输入棋子位置(行,列):");
			String s = scan.nextLine();

			try
			{
				String[] ss = s.split(",");
				int row = Integer.parseInt(ss[0])-1;  // 行号
				int col = Integer.parseInt(ss[1])-1;  // 列号
				if(data[row][col]!=0) continue;  // 该位置已经有棋子
				data[row][col] = side_char;  // 记录落子
				side = !side;
				break;
			}
			catch(Exception e)
			{
			}
		}
	}
}

public class MyTest
{
	public static void main(String[] args)
	{
		// o x 填充游戏
		/*
		  初始:
		  _ _ _
		  _ _ _
		  _ _ _

		  o 输入位置: 1,1
		  o _ _
		  _ _ _
		  _ _ _
		  x 输入位置: 2,2
		  o _ _
		  _ x _
		  _ _ _

		  当某一方出现了3个棋子连成直线或对角线,则该方获胜
		*/ 

		MyChess a = new MyChess();

		for(;;)
		{
			a.show();  // 显示局面
			if(a.isEnd())
			{
				a.showResult();
				break;
			}
			a.play(); // 继续走棋
		}

	}
}

03-02自底向上风格_模拟游戏,布布扣,bubuko.com

时间: 2024-08-14 19:38:39

03-02自底向上风格_模拟游戏的相关文章

编程算法基础-3.2自底向上风格

3.2自底向上风格 自顶向下不是万能的 需求发生变化时,会很尴尬 变化是需求的本质特征 内部或外界的环境一旦发生小小的变化,就会造成很大的变动 个人---完全掌控----->简单的软件逻辑<-----完全计划的模式 小组协作---掌控变化---->庞大的软件规模---产生-->自适应变化<-----解决-----主流解决方案:面向对象 面向对象正是采用自底向上的设计风格 打印控制台表格2 实际开发中,使用混合风格,根据项目的要求而定 需求:不变,变 不变--->多种风格

什么是dandy 风格_百度知道

什么是dandy 风格_百度知道 什么是dandy 风格    2010-06-21 10:56 平ping123 | 分类:服装/首饰 | 浏览11257次    题谢谢    有没有比较准确文意思    扫描二维码下载    下载知道APP    10分钟有问必答!    建议:可使用微信的"扫一扫"功能扫描下载    分享到:    2010-06-21 23:08 提问者采纳    Dandy含义    dandy词查查字典我们看下解释:    n    1. 好时髦男子;花花

3K专制 for Mac(情节模拟游戏)

3K专制 for Mac((Despotism 3k Mac)是一款风格独特的幻想情节模拟类游戏.当有一日AI与人类之间产生了分歧,人类成为了AI运作下去的养料的时候..那么一切会变成什么样?现在..你就是这个系统的负责人,利用弱小的人类来获得力量.赶快来体验吧. Despotism3k for Mac是一款策略向的模拟游戏,此时的人类已经被人工智能所奴役,而你将控制这些可怜的人来生产机器所需的能量,但又要确保他们不会死于饥饿或疲劳,顺便一说的是,玩家可以在任何时候循环利用生物反应器中的备用材料

03-03测试驱动风格_设计程序

设计程序 在编写图形界面软件的时候,经常会遇到处理两个矩形的关系. 如图[1]所示,矩形的交集指的是:两个矩形重叠区的矩形,当然也可能不存在(参看[2]).两个矩形的并集指的是:能包含这两个矩形的最小矩形,它一定是存在的. 本题目的要求就是:由用户输入两个矩形的坐标,程序输出它们的交集和并集矩形. 矩形坐标的输入格式是输入两个对角点坐标,注意,不保证是哪个对角,也不保证顺序(你可以体会一下,在桌面上拖动鼠标拉矩形,4个方向都可以的). 输入数据格式: x1,y1,x2,y2 x1,y1,x2,y

C#_模拟webAp_POST-GET-PUT-DELETE

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Web; namespace WebAPIClientDemo { public class RestClient { private string BaseUri; public RestClient(string baseUri

HDU 4941 Magical Forest _(:зゝ∠)_ 模拟题

模拟大法保平安_(:зゝ∠)_ #include <cstdio> #include <map> #include <set> #include <algorithm> using namespace std; const int N = 1; struct node{ int x, y, val; node(int a=0,int b=0,int c=0):x(a),y(b),val(c){} bool operator<(const node&am

03-01自顶向下风格_编程

设计程序 在中文Windows环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来. 比如: ┌─┬─┐ │   │  │ ├─┼─┤ │   │  │ └─┴─┘ 其实,它是由如下的符号拼接的: 左上 = ┌ 上 = ┬ 右上 = ┐ 左 = ├ 中心 = ┼ 右 = ┤ 左下= └ 下 = ┴ 右下 = ┘ 垂直 = │ 水平 = ─ 本题目要求编写一个程序,根据用户输入的行.列数画出相应的表格来. 例如用户输入: 3 2 则程序输出: ┌─┬─┐ │   │  │ ├─┼─┤ │   │ 

狄泰学院_十二月提升_ 学习任务(2017.03.02 -- 2017.03.08)

这一周的学习任务为<专业嵌入式软件开发>中的第一章. 大家在阅读的时候请思考下面的问题: 1) 微处理器和微控制器有什么不同? 答:在编程的角度来看,微处理和微控制器没有什么不同,两者之间的区别是在内存与外设的分布上: 如果存在片内内存与片内外设,就是微控制器,反之则是微处理器,我们常用的PC的CPU就是微处理器; 嵌入式设备都使用微控制器,一为了节约成本,二为了功耗更低,三为了硬件设计简化. 2) 寄存器的作用是什么? 答:寄存器是CPU的组成部分,处理单元是通过寄存器来运行程序和加工数据的

谈网页游戏外挂之用python模拟游戏(热血三国2)登陆

看web看多了,想写写页游的外挂,其实原理是一样的,就是端口不一样协议字段你不知道,而这也提高了点技术门槛,看我们来一点一点突破这些门槛,这次我们来用python发包模拟flash的客户端登陆. 以热血三国2为例,热血三国2是一款balabalaba自己查去吧的游戏. step1 : 在sg2.ledu.com注册个账户  略过...step2 : 登陆游戏,wireshark抓包分析    以双线784服为例,游戏页面地址http://s784.sg2.ledu.com/,现在游戏一般都是联运