猜拳游戏(题目+源码)

题目:

随机数的应用-猜拳游戏:石头、剪刀、布
分析:1 两个对象(人person和机器compter),抽象出公共的部分(Player类,包含玩家姓名属性、积分属性、出拳的抽象方法),让人和机器实现它。
2 定义一个Game游戏类,包含PK的方法和显示最终结果的方法,
3 定义一个测试类,进行游戏,直到玩家选择退出游戏才结束对战

例如;

第1局开始
请输入1石头 2剪刀 3布
-->用户选择
-->输出结果
小白出拳:石头
电脑出拳:布
结果:电脑赢了

提示是否继续,继续请输入Y?【若继续】:

第2局开始
请输入1石头 2剪刀 3布
-->用户选择
-->输出结果 小白出石头 电脑出布 电脑赢了

【若不继续】:输出积分:小白积分:1 ,电脑积分:0

import java.util.Scanner;

public class TestGame {

    public static void main(String[] args) {

//        玩家对象
        Person p = new Person("小白");
//        电脑对象
        Computer c = new Computer("电脑CC");

        Game game = new Game(p, c);

//        game.pk();
        Scanner input = new Scanner(System.in);
        while (true) {
            game.pk();

            System.out.println("是否继续,继续Y");
            String str = input.next();
            //忽略大小写
            if (!"Y".equalsIgnoreCase(str)) {
                break;
            }
        }
public abstract class Player {                  //抽象父类

    private String name;//用户名
    private int    score;//积分

    public Player() {

    }

    public Player(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    /**
     * 出拳
     */
    public abstract int showFist();
}
import java.util.Scanner;

public class Person extends Player{

    public Person(String pname){
        super(pname);
    }

    @Override
    public int showFist() {
        System.out.println("请用户输入1石头 2剪刀 3布");
        Scanner input = new Scanner(System.in);
        int fist  = input.nextInt();
        return fist;
    }

}
import java.util.Random;

/**
 * 电脑出拳
 * @author Administrator
 *
 */
public class Computer extends Player{

    public Computer(String cname){
        super(cname);
    }

    @Override
    public int showFist() {

        //随机数 1-3
        Random random = new Random();
        int fist = random.nextInt(3) +1;
        return fist;
    }

}
public class Game {

    private Person p;
    private Computer c;
//    private int i = 1;

    public Game(Person p,Computer c){

        this.p = p;
        this.c = c;
    }

    /**
     * pk
     * 判断当前局的输赢结果
     */
    public void pk(){

        //提升部分:五局
        for (int i = 1; i <= 5; i++) {

            System.out.println("第" + i +"局");
            //获取玩家出拳的数字
            int pfist = p.showFist();
            //获取电脑出拳的数字
            int cfist = c.showFist();
            //获取玩家出拳的具体
            String pValue = getFistValue(pfist);
            //获取电脑出拳的具体
            String cValue = getFistValue(cfist);    

            //比较规则
            if ((pfist == 1 &&  cfist == 2) ||(pfist == 2 &&  cfist == 3) || (pfist == 3 &&  cfist == 1) ) {

                System.out.println(p.getName() + "玩家出拳:" + pValue);
                System.out.println(c.getName() + "电脑出拳:" + cValue);
                System.out.println("恭喜你:" + p.getName() );

                //用户积分 +1
                p.setScore(  p.getScore() + 1  );

            }else if (pfist == cfist) {
                System.out.println(p.getName() + "玩家出拳:" + pValue);
                System.out.println(c.getName() + "电脑出拳:" + cValue);
                System.out.println("平局" );

            }else{
                System.out.println(p.getName() + "玩家出拳:" + pValue);
                System.out.println(c.getName() + "电脑出拳:" + cValue);
                System.out.println("你输了" +  ",电脑:" + c.getName() + "赢了");

                c.setScore(  c.getScore() + 1  );
            }
        }

//        i++;

        // 提升完之后:调用显示结果的方法
        showResult();

    }

    //获取猜拳对应的中文
    public String getFistValue(int fist){

        String fistValue = "";
        switch (fist) {
        case 1:
            fistValue = "石头";
            break;
        case 2:
            fistValue = "剪刀";
            break;
        case 3:
            fistValue = "布";
            break;
        default:
            break;
        }
        return fistValue;

    }

    //最终结果
    public void showResult() {
        System.out.println("最终结果:");
        System.out.println(p.getName()  +"最终积分: " + p.getScore());
        System.out.println(c.getName()  +"最终积分: " + c.getScore());

    }
}
时间: 2024-12-12 06:34:10

猜拳游戏(题目+源码)的相关文章

猜拳游戏GuessGame源码

该游戏是一款比较不错的猜拳游戏GuessGame源码案例,GuessGame--猜拳游戏,这也是我自己的第一款休闲类的游戏案例,游戏实现也比较简单的,希望这个能够帮大家的学习和使用,更多安卓源码尽在源码天堂android游戏源码频道. 源码项目下载:http://code.662p.com/view/10059.html <ignore_js_op> 打开时的界面 游戏的界面 详细说明:http://android.662p.com/thread-6138-1-1.html

Chrome自带恐龙小游戏的源码研究(完)

在上一篇<Chrome自带恐龙小游戏的源码研究(七)>中研究了恐龙与障碍物的碰撞检测,这一篇主要研究组成游戏的其它要素. 游戏分数记录 如图所示,分数及最高分记录显示在游戏界面的右上角,每达到100分就会出现闪烁特效,游戏第一次gameover时显示历史最高分.分数记录器由DistanceMeter构造函数实现,以下是它的全部代码: 1 DistanceMeter.dimensions = { 2 WIDTH: 10, //每个字符的宽度 3 HEIGHT: 13, //每个字符的高 4 DE

Chrome自带恐龙小游戏的源码研究(七)

在上一篇<Chrome自带恐龙小游戏的源码研究(六)>中研究了恐龙的跳跃过程,这一篇研究恐龙与障碍物之间的碰撞检测. 碰撞盒子 游戏中采用的是矩形(非旋转矩形)碰撞.这类碰撞优点是计算比较简单,缺点是对不规则物体的检测不够精确.如果不做更为精细的处理,结果会像下图: 如图所示,两个盒子虽然有重叠部分,但实际情况是恐龙和仙人掌之间并未发生碰撞.为了解决这个问题,需要建立多个碰撞盒子: 不过这样还是有问题,观察图片,恐龙和仙人掌都有四个碰撞盒子,如果每次Game Loop里都对这些盒子进行碰撞检测

Chrome自带恐龙小游戏的源码研究(五)

在上一篇<Chrome自带恐龙小游戏的源码研究(四)>中实现了障碍物的绘制及移动,从这一篇开始主要研究恐龙的绘制及一系列键盘动作的实现. 会眨眼睛的恐龙 在游戏开始前的待机界面,如果仔细观察会发现恐龙会时不时地眨眼睛.这是通过交替绘制这两个图像实现的: 可以通过一张图片来了解这个过程: 为实现图片的切换,需要一个计时器timer,并且需要知道两张图片切换的时间间隔msPerFrame.当计时器timer的时间大于切换的时间间隔msPerFrame时,将图片切换到下一张,到达最后一张时又从第一张

Chrome自带恐龙小游戏的源码研究(六)

在上一篇<Chrome自带恐龙小游戏的源码研究(五)>中实现了眨眼睛的恐龙,这一篇主要研究恐龙的跳跃. 恐龙的跳跃 游戏通过敲击键盘的Spacebar或者Up来实现恐龙的跳跃.先用一张图来表示整个跳跃的过程: 首先规定向下为正方向,即重力加速度(g)为正,起跳的速度(v)为负,恐龙距离画布上方的距离为yPos: 每一帧动画中,速度都会与重力加速度相加得到新的速度,再用新的速度与yPos相加得到新的yPos,改变恐龙的位置为新的yPos,表现出来为yPos不断减小: 当恐龙升至最高点,此时速度为

双人对战的球类游戏IOS源码

双人对战的球类游戏源码,这个是一款双人对战的ios球类游戏源码,游戏的源码也比较详细的,我们在屏幕上下看到各有一个球门,内有一球,两边通过控制轮盘使球进入对方的球门的,其实玩法也很简单的,我们知道体育类的游戏目前,还是很少的,大家可以参考一下这个游戏的方案,希望能够推出更强大的游戏. <ignore_js_op> <ignore_js_op> 详细说明:http://ios.662p.com/thread-1426-1-1.html

是男人就下100层【第五层】——2048游戏从源码到发布市场

上一篇<是男人就下100层[第五层]--换肤版2048游戏>中阳光小强对2048游戏用自己的方式进行了实现,并分享了核心源码,这一篇阳光小强打算将该项目的所有源代码公开并结合这个实例在这篇文章中介绍一下如何添加广告和实现分享功能. 最终运行效果如下(更多运行效果请看<是男人就下100层[第五层]--换肤版2048游戏>): 一.如何实现换肤 换肤的思路其实很简单,在ActionBar中添加菜单,当用户选择某一个皮肤后就将当前的皮肤状态修改并保存到SharedPreference中,

RPG游戏案例源码

再发一份我的另外一个作品吧,源码OzgGameRPG,本游戏主要用于技术的研究和积累,目前只部署了ios平台.游戏第一次启动的时候会把数据库复制到可写文件夹,若数据库结构因为一些改动发生了变化,需要把旧的数据库删除. 编译时需要将本游戏的目录复制到cocos2d-x-2.2.3/projects/. 游戏中所用的一部分图片来自 http://www.66rpg.com/type.php?t=17 另一部分图片来自http://usui.moo.jp/rpg_tukuru.html 声音文件来自 

Chrome自带恐龙小游戏的源码研究(四)

在上一篇<Chrome自带恐龙小游戏的源码研究(三)>中实现了让游戏昼夜交替,这一篇主要研究如何绘制障碍物. 障碍物有两种:仙人掌和翼龙.仙人掌有大小两种类型,可以同时并列多个:翼龙按高.中.低的随机飞行高度出现,不可并行.仙人掌和地面有着相同的速度向左移动,翼龙则快一些或慢一些,因为添加了随机的速度修正.我们使用一个障碍物列表管理它们,当它们移出屏幕外时则将其从列表中移除.同时再用一个列表记录它们的类型: 1 Obstacle.obstacles = []; //存储障碍物的数组 2 Obs

双人对战的球类游戏ios源码项目

双人对战的球类游戏源码,这个是一款双人对战的ios球类游戏源码,游戏的源码也比较详细的,我们在屏幕上下看到各有一个球门,内有一球,两边通过控制***使球进入对方的球门的,其实玩法也很简单的,我们知道体育类的游戏目前,还是很少的,大家可以参考一下这个游戏的方案,希望能够推出更强大的游戏. 源码下载: http://code.662p.com/view/6261.html <ignore_js_op> 详细说明:http://ios.662p.com/thread-1426-1-1.html