用java写猜拳游戏,Java写人机猜拳游戏(可扩展其他游戏或其他参与者)
初学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写人机猜拳游戏(可扩展其他游戏或其他参与者)相关推荐
- 设计一个猜拳游戏,完成人机猜拳互动游戏的开发。
设计一个猜拳游戏,完成人机猜拳互动游戏的开发. 功能: 选取对战角色 猜拳 记录分数 效果图: 提示: 先思考这个程序中一共涉及到多少个类,需要创建多少个对象. import java.util.Ra ...
- 人机猜拳代码python_python实现人机猜拳小游戏
今天的这篇文章呢是对人机猜拳小游戏--石头剪刀布的一个描述以及代码展现 石头剪刀布游戏代码的简介:关于石头剪刀布这个小游戏,大致得到思路就是,玩家出一个手势,然后电脑再随机出一个手势,最后再判断是玩家 ...
- python编程猜拳小游戏_python实现人机猜拳小游戏
今天的这篇文章呢是对人机猜拳小游戏--石头剪刀布的一个描述以及代码展现 石头剪刀布游戏代码的简介:关于石头剪刀布这个小游戏,大致得到思路就是,玩家出一个手势,然后电脑再随机出一个手势,最后再判断是玩家 ...
- 【Java语言】项目实践:人机猜拳游戏(源码)(面向对象方法)
package com.njwbhz.part0217.Mora;import java.util.Scanner;public class PersonPlayer {//属性//人类玩家的名字St ...
- java编写电脑猜拳_Java开发实现人机猜拳游戏
本文实例为大家分享了Java开发实现人机猜拳游戏的具体代码,供大家参考,具体内容如下 猜拳游戏 游戏规则:人和电分别出剪刀.石头.布,直到人战胜电脑,游戏结束. 整体分析: 1.总体是一个循环 -&g ...
- c++switch实现猜拳_C语言实现人机猜拳游戏,非常适合C++小白练习的项目!
学习迷茫遇到问题了吗?现在关注微信公众号:C程序编程 免费获取进阶指导和学习资料! 本文福利在文末! 这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后 ...
- python人机猜拳_python实现人机猜拳小游戏
今天的这篇文章呢是对人机猜拳小游戏--石头剪刀布的一个描述以及代码展现 石头剪刀布游戏代码的简介:关于石头剪刀布这个小游戏,大致得到思路就是,玩家出一个手势,然后电脑再随机出一个手势,最后再判断是玩家 ...
- Java人机猜拳游戏(命令行版)
这是本学期的java作业: java编写一个人机对战的猜拳小游戏.人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况.有简单的操作界面. 学了一个学期的Java,感觉收获还挺多的.第一次用Java写小 ...
- Java人机猜拳小游戏
完成人机猜拳互动游戏的开发 阶段一:实验--分析业务,创建用户类 1.分析业务,抽象出类.类的特征和行为 2.创建出用户类 阶段二:实验--创建出计算机类 创建计算机类Computer.实现计算机出拳 ...
最新文章
- 计算机组成原理:输入输出系统
- 科学计算机程序 字表处理软件都是,计算机应用基础知识_计算机应用基础试题及答案【最新资料】.doc...
- python抓取微博数据中心_有哪些「神奇」的数据获取方式?
- 自己搭建个对象存储服务难不难?
- 运维基础--Linux用户和组的管理
- golang内置接口error
- buuctf 文件中的秘密
- oninput,onpropertychange,onchange的用法和区别
- 如何加强测评机构自身的规范化管理, 不断提高测评的能力和水平
- html checkbox 多选 根据数据库来显示选取和未选取,前端框架(2)DIV多选复选框框的封装和MySql数据库存取...
- 洛谷 P2647 最大收益
- hdu 4057(ac自动机+状态压缩dp)
- 智能优化算法:细菌觅食优化算法 - 附代码
- daterangepicker日历插件使用参数注意问题
- X.509证书编码及解析
- 视频编辑 ae pr 区别
- 清华紫光输入法linux,清华紫光拼音输入法
- 阅读学术论文的心得体会
- 关于使用GHOST进行磁盘对拷整盘镜像以及镜像恢复的一些注意事项
- Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图
热门文章
- 在所有linux版本安装oracle9i
- 再提手机上网应该包月计费
- 【转】删除数据库中重复数据的几个方法
- 阿里云ECS服务器自定义端口无法访问问题记录
- 【Mac + Appium + Python3.6学习(四)】之常用的IOS自动化测试API总结
- windows下python Tkinner环境布置(包含PIL环境安装)
- Linux 学习记录
- 教程-Delphi资源文件(全面分析于使用)
- POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)
- Reapter 中客户端控件和服务器端控件的选择