初学Java,写一个控制台输入输出的小游戏,模拟人机猜拳。为了扩展性稍微强一些,这个小游戏代码有些复杂,但确实可以扩展其他游戏或者其他参与者的。

代码还有一些小问题,后面贴出来。。。

/*************************************************************************************************************************/

各位,下面是小弟初次尝试写的过百行的代码,交互界面很粗糙,我只是想把重点放在实现自己目前对于Java的理解上,欢迎批评指正。

重点表明,开始有个问题,电脑每次都是出拳一样,在得到JAVA SE论坛中 longtian1213和vnvlyp的帮助得以改正;

我原本未将电脑参与者类ComputerParty中的 “Random rd = new Random();    int figur = Math.abs(rd.nextInt(ComputerParty.realCount+1))%3 ; ”封装在方法中,

导致每次运行figur都是取得相同的值,改为下面方式就ok了。

public int giveFigur(){Random rd = new Random();    return Math.abs(rd.nextInt(ComputerParty.realCount+1))%3 ;     }

个人认为,还是自己对Java的运行原理一知半解导致的这个问题,我不清楚这个取随机数的代码在什么情况下以什么方式运行,其实我个人调试的时候,已经发现每次这个figur都取一样的值,但是不知道为什么? 希望热心同仁帮我解释下,不胜感激! 我也会在论坛里再请教那两位兄台,得到答案后我会更新到这里。

/*************

*Added by Light on 2014-7-21

*上面那个问题longtian1213帮忙做了解答:int figur是成员变量,而成员变量在实例化时会做初始化;然后再使用实例化的对象时,此值是不会变化的;如果想要成员变量的值

*在每次使用对象时随机生成数(限此代码例子),必须对修改成员变量提供方法,就是public int giveFigur(){} .

**********/

/**

* 功能:实现一个猜拳游戏,在控制台提供输入,电脑自动随机出拳;

* 要能够统计总共进行的次数和电脑赢得次数

* Created by Light on 2014-7-14

* Modified by Light on 2014-7-16

*/

package com.first;

import java.util.*;

public class FigureGuessing {

public static void main(String []args)

{

//创建游戏

FigureGuess fr = new FigureGuess();

//创建参与者

ComputerParty cp = new ComputerParty();

PersonParty pp = new PersonParty();

//开始游戏

fr.startGame(cp, pp);

}

}

/*****************************************************************************************/

//定义抽象游戏父类

abstract class Game

{

abstract public void startGame(ComputerParty cp,PersonParty pp);//开始游戏,调用actInGame()来操作;

abstract public void actInGame(ComputerParty cp,PersonParty pp);//游戏输赢判定,包含各种游戏规则实现

abstract public void stopGame(ComputerParty cp,PersonParty pp); //结束游戏,打印结束标签;

}

//定义抽象参与者类

abstract class Participate

{

public static int maxCount = 0;//最多参与回合数

public static int realCount = 0;//实际参与回合数

public static int winCount = 0;//赢的回合数

abstract public void setRounds(int rounds);//定义参与回合数(可选)

abstract public String playGame();//参与游戏,定义如何参与游戏

abstract void outOfGame();//停止参与游戏,定义停止后的操作,包括是否打印出参赛结果

}

/*****************************************************************************************/

//定义猜拳游戏类继承余Game

class FigureGuess extends Game

{

//开始游戏,调用actInGame()来操作;

public void startGame(ComputerParty cp,PersonParty pp)

{

actInGame(cp,pp);

}

//游戏输赢判定,包含各种游戏规则实现

public void actInGame(ComputerParty cp,PersonParty pp)

{

//调用参与者参与游戏

//首次接受游戏参与者输入---i-->ComputerParty; j-->PersonParty

int i = Integer.parseInt(cp.playGame());

int j = Integer.parseInt(pp.playGame());

//只要玩家输入非4、5,则游戏判定继续

while(j!=4 && j!=5)

{

//游戏输赢判定

if(i==j)

{

cp.showFigur();

pp.showFigur();

System.out.println("双方出拳一样,打平了!");

}else if(i>j){

if(i-j==1)

{

cp.showFigur();

pp.showFigur();

System.out.println("电脑赢了!");

ComputerParty.winCount++;

}else{

cp.showFigur();

pp.showFigur();

System.out.println("玩家赢了!");

}

}else{

if(j-i==1)

{

cp.showFigur();

pp.showFigur();

System.out.println("玩家赢了!");

}else{

cp.showFigur();

pp.showFigur();

System.out.println("电脑赢了!");

ComputerParty.winCount++;

}

}

//重置两个参与者的输入,如果玩家输入4或者5,则在下一轮判定之前退出游戏

//人先出拳

j = Integer.parseInt(pp.playGame());

i = Integer.parseInt(cp.playGame());

}

//退出循环时,无论是主动还是被动,表示游戏已经结束了

stopGame(cp,pp);

}

//结束游戏,打印结束标签;

public void stopGame(ComputerParty cp,PersonParty pp)

{

pp.outOfGame();

cp.outOfGame();

ComputerParty.showWinCount();

}

}

/*****************************************************************************************/

//定义子类电脑继承于Participate

class ComputerParty extends Participate

{

//电脑随机产生一个数字,代表拳头(0)、布(1)、剪刀(2)

public int giveFigur()

{

Random rd = new Random();

return Math.abs(rd.nextInt(ComputerParty.realCount+1))%3 ;

}

//初始化回合数(可选),如果设置了回合数,在达到此数值时自动推出游戏;如果未设置,则根据输入判定是否继续游戏

public void setRounds(int rounds)

{

ComputerParty.maxCount = rounds;

}

//定义如何进行参与游戏,包含对何时退出游戏的定义,保证参与者的主动性;但是由于电脑是被动一方,不主动退出游戏

public String playGame()

{

//System.out.print(Participate.count);

ComputerParty.realCount++;

return String.valueOf(this.giveFigur());

}

//showFigur

public void showFigur()

{

System.out.println("随机数:"+this.giveFigur());

switch(this.giveFigur()){

case 0:System.out.println("电脑出拳头!"); break;

case 1: System.out.println("电脑出布!"); break;

case 2: System.out.println("电脑出剪刀!"); break;

default:System.out.println("出的啥啊,没看见!");break;

}

}

//退出游戏操作

public void outOfGame()

{

System.out.println("对手退出了游戏,电脑自动退出游戏!");

}

//定义showWinCount方法

public static void showWinCount()

{

System.out.println("电脑总共赢了"+ComputerParty.winCount+"回合");

}

}

/*****************************************************************************************/

//定义人参与者类继承于Participate类

class PersonParty extends Participate

{

int figur = 0;

//初始化回合数(可选),如果设置了回合数,在达到此数值时自动推出游戏;如果未设置,则根据输入判定是否继续游戏

public void setRounds(int rounds)

{

PersonParty.realCount=rounds;

}

//定义如何进行参与游戏,包含对何时退出游戏的定义,保证参与者的主动性;

public String playGame()

{

//提示输入数字来代表出拳

System.out.println("请出拳(0-拳头;1-布;2-剪刀;4-退出):");

//接受输入

Scanner sr = new Scanner(System.in);

figur = sr.nextInt();

//参与一次就要将realCount++

//如果设置了最大回合数的话,判断此次是否大于最大参与回合数

if(PersonParty.maxCount!=0 && PersonParty.realCount>PersonParty.maxCount)

{

return "5";

}else{

return String.valueOf(figur);

}

}

//showFigur

public void showFigur()

{

switch(figur){

case 0:System.out.println("玩家出拳头!"); break;

case 1: System.out.println("玩家出布!"); break;

case 2: System.out.println("玩家出剪刀!"); break;

case 4: break;

case 5: break;

default:System.out.println("出的啥啊,没看见!");break;

}

}

//退出游戏操作

public void outOfGame()

{

//判断退出游戏原因

if(figur==4)

{

System.out.println("不想玩了!");

System.out.println("总共玩了"+PersonParty.realCount+"回合!");

}else{

System.out.println("达到最大游戏回合限制了!");

System.out.println("总共玩了"+(PersonParty.realCount-1)+"回合!");

}

}

}

用java写猜拳游戏,Java写人机猜拳游戏(可扩展其他游戏或其他参与者)相关推荐

  1. 设计一个猜拳游戏,完成人机猜拳互动游戏的开发。

    设计一个猜拳游戏,完成人机猜拳互动游戏的开发. 功能: 选取对战角色 猜拳 记录分数 效果图: 提示: 先思考这个程序中一共涉及到多少个类,需要创建多少个对象. import java.util.Ra ...

  2. 人机猜拳代码python_python实现人机猜拳小游戏

    今天的这篇文章呢是对人机猜拳小游戏--石头剪刀布的一个描述以及代码展现 石头剪刀布游戏代码的简介:关于石头剪刀布这个小游戏,大致得到思路就是,玩家出一个手势,然后电脑再随机出一个手势,最后再判断是玩家 ...

  3. python编程猜拳小游戏_python实现人机猜拳小游戏

    今天的这篇文章呢是对人机猜拳小游戏--石头剪刀布的一个描述以及代码展现 石头剪刀布游戏代码的简介:关于石头剪刀布这个小游戏,大致得到思路就是,玩家出一个手势,然后电脑再随机出一个手势,最后再判断是玩家 ...

  4. 【Java语言】项目实践:人机猜拳游戏(源码)(面向对象方法)

    package com.njwbhz.part0217.Mora;import java.util.Scanner;public class PersonPlayer {//属性//人类玩家的名字St ...

  5. java编写电脑猜拳_Java开发实现人机猜拳游戏

    本文实例为大家分享了Java开发实现人机猜拳游戏的具体代码,供大家参考,具体内容如下 猜拳游戏 游戏规则:人和电分别出剪刀.石头.布,直到人战胜电脑,游戏结束. 整体分析: 1.总体是一个循环 -&g ...

  6. c++switch实现猜拳_C语言实现人机猜拳游戏,非常适合C++小白练习的项目!

    学习迷茫遇到问题了吗?现在关注微信公众号:C程序编程 免费获取进阶指导和学习资料! 本文福利在文末! 这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后 ...

  7. python人机猜拳_python实现人机猜拳小游戏

    今天的这篇文章呢是对人机猜拳小游戏--石头剪刀布的一个描述以及代码展现 石头剪刀布游戏代码的简介:关于石头剪刀布这个小游戏,大致得到思路就是,玩家出一个手势,然后电脑再随机出一个手势,最后再判断是玩家 ...

  8. Java人机猜拳游戏(命令行版)

    这是本学期的java作业: java编写一个人机对战的猜拳小游戏.人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况.有简单的操作界面. 学了一个学期的Java,感觉收获还挺多的.第一次用Java写小 ...

  9. Java人机猜拳小游戏

    完成人机猜拳互动游戏的开发 阶段一:实验--分析业务,创建用户类 1.分析业务,抽象出类.类的特征和行为 2.创建出用户类 阶段二:实验--创建出计算机类 创建计算机类Computer.实现计算机出拳 ...

最新文章

  1. 计算机组成原理:输入输出系统
  2. 科学计算机程序 字表处理软件都是,计算机应用基础知识_计算机应用基础试题及答案【最新资料】.doc...
  3. python抓取微博数据中心_有哪些「神奇」的数据获取方式?
  4. 自己搭建个对象存储服务难不难?
  5. 运维基础--Linux用户和组的管理
  6. golang内置接口error
  7. buuctf 文件中的秘密
  8. oninput,onpropertychange,onchange的用法和区别
  9. 如何加强测评机构自身的规范化管理, 不断提高测评的能力和水平
  10. html checkbox 多选 根据数据库来显示选取和未选取,前端框架(2)DIV多选复选框框的封装和MySql数据库存取...
  11. 洛谷 P2647 最大收益
  12. hdu 4057(ac自动机+状态压缩dp)
  13. 智能优化算法:细菌觅食优化算法 - 附代码
  14. daterangepicker日历插件使用参数注意问题
  15. X.509证书编码及解析
  16. 视频编辑 ae pr 区别
  17. 清华紫光输入法linux,清华紫光拼音输入法
  18. 阅读学术论文的心得体会
  19. 关于使用GHOST进行磁盘对拷整盘镜像以及镜像恢复的一些注意事项
  20. Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图

热门文章

  1. 在所有linux版本安装oracle9i
  2. 再提手机上网应该包月计费
  3. 【转】删除数据库中重复数据的几个方法
  4. 阿里云ECS服务器自定义端口无法访问问题记录
  5. 【Mac + Appium + Python3.6学习(四)】之常用的IOS自动化测试API总结
  6. windows下python Tkinner环境布置(包含PIL环境安装)
  7. Linux 学习记录
  8. 教程-Delphi资源文件(全面分析于使用)
  9. POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)
  10. Reapter 中客户端控件和服务器端控件的选择