4.猜拳游戏(修改)

4.猜拳游戏(修改)

  • 对战  人  电脑
    • 出拳 出拳的:内容1 2 3
    • 积累积分 {如何计分?规则 胜、负、平 各计多少分}
    • 流程 n局 (循环 n 次数固定的 ,可以for
    • 最后要有结果的输出 、流程每局的胜利or失败 、第几局、每一方出的是什么、等等输出
    • 分析:如何使用面向对象 抽象成代码
  • 分析出 人、 电脑 两个类
    • 人: 
      • 属性:姓名、积分
      • 方法:出拳:
    • 电脑: 姓名、 积分
      • 方法: 出拳:
  • 1.初步的想法:抽取一个父类,共同的属性、方法都放进去
  • 2.方法是需要子类重写的,需要两个子类:人和电脑
  • 3.细节:如何重写方法:人输入、电脑是随机
  • 4.流程:循环 简化:先进行一次比较,看是否能正常输出,然后再考虑循环多次的情况
bean包含BaseRole、Hand、Computer、Person类
controller包含Justice类
view包含Views类

--1.BaseRole类:抽象类,共性抽取Person类和Computer类

package bean;
public abstract class BaseRole {
    protected String username="匿名";
    protected int score;
    protected int hand;

    @Override
    public String toString() {
        return "BaseRole{" +
                "username='" + username + '\'' +
                ", score=" + score +
                '}';
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getScore() {
        return score;
    }

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

    public abstract int hand();
}


2.Hand类定义猜拳常量
package bean;
public class Hand {
    public static final int SCISSORS = 1; //剪刀
    public static final int STONE = 2;  //石头
    public static final int CLOTH = 3;  //布
}


3.Computer类继承抽象类BaseRole

package bean;
public class Computer extends BaseRole{
    @Override
    public int hand() {  //猜拳
        return (int) (Math.random()*3+1);
    }
}


4.Person类继承抽象类BaseRole

package bean;
import view.Views;
public class Person extends BaseRole {
    private Views v = new Views();
    public static final int PERSON_WIN = 1;
    public static final int PERSON_LOSE = -1;
    public static final int DRAW = 0;

    @Override
    public int hand() {
        return v.inputNum(this);
    }
}


5.Justice类进行猜拳的逻辑评判

package controller;
import bean.Computer;
import bean.Hand;
import bean.Person;
public class Justice {
    public int judge(Person p, int personHand, Computer c, int computerHand) {
        //1 2 3
        //剪刀<石头<布<剪刀
        //1  0 -1
        //玩家胜 0 平 -1 玩家负
        switch (personHand) {
            case Hand
                    .SCISSORS:
                switch (computerHand) {
                    case Hand.CLOTH:
                        return Person.PERSON_WIN;
                    case Hand.SCISSORS:
                        return Person.DRAW;
                    case Hand.STONE:
                        return Person.PERSON_LOSE;
                }


                break;
            case Hand.STONE:
                switch (computerHand) {

                    case Hand.CLOTH:
                        return Person.PERSON_LOSE;
                    case Hand.SCISSORS:
                        return Person.PERSON_WIN;
                    case Hand.STONE:
                        return Person.DRAW;
                }

                break;
            case Hand.CLOTH:
                switch (computerHand) {
                    case Hand.CLOTH:
                        return Person.DRAW;
                    case Hand.SCISSORS:
                        return Person.PERSON_LOSE;
                    case Hand.STONE:
                        return Person.PERSON_WIN;
                }
                break;
        }

        return Person.DRAW;
    }

    /**
     * 胜利+1,输-1,平不加
     *
     * @param p
     * @param c
     * @param result
     */
    public void addScore(Person p, Computer c, int result) {
        switch (result) {
            case Person.PERSON_LOSE:
                p.setScore(p.getScore() - 1);
                c.setScore(c.getScore() + 1);
                break;
            case Person.PERSON_WIN:
                p.setScore(p.getScore() + 1);
                c.setScore(c.getScore() - 1);
                break;
            default:
                break;
        }
    }
}


6.Views类进行控制台输入输出,相当于视图层

package view;
import bean.BaseRole;
import bean.Computer;
import bean.Hand;
import bean.Person;
import java.util.Scanner;
public class Views {
    private static Scanner sc = new Scanner(System.in);

    public int inputNum(BaseRole role) {
        System.out.println("玩家:" + role.getUsername() + ",请出拳!");
        return inputNum(3);
    }

    private int inputNum(int max) {
        System.out.println("请输入1-" + max + "之间的数字:");
        String str = sc.nextLine();
        int num = -1;
        try {
            num = Integer.parseInt(str);
        } catch (NumberFormatException e) {

        }
        if (num < 0 || num > max) {
            System.out.println("输入有误!");
            num = inputNum(max);
        }
        return num;
    }

    public void show(BaseRole role, int hand) {
        String roleName = role instanceof Person ? "玩家" : "电脑";
        System.out.print(roleName + ":" + role.getUsername() + "出的是:");
        switch (hand) {
            case Hand.SCISSORS:
                System.out.println("剪刀");
                break;
            case Hand.STONE:
                System.out.println("石头");
                break;
            case Hand.CLOTH:
                System.out.println("布");
                break;
        }
    }

    public void showResult(Person p, Computer c, int result) {

        switch (result) {
            case Person.DRAW:
                System.out.println("平手!");
                break;
            case Person.PERSON_LOSE:
                System.out.println("电脑" + c.getUsername() + "赢了!");
                break;
            case Person.PERSON_WIN:
                System.out.println("玩家:" + p.getUsername() + "赢了!");
                break;
        }
    }

    public void welcome() {
        System.out.println("欢迎来到猜拳大战!准备好血洗你的对手了吗?");
    }

    public String inputName() {
        System.out.println("请输入你的大名:");
        return sc.nextLine();
    }

    public int inputRound() {
        System.out.println("请输入你想玩的回合数:最大为:20");
        return inputNum(20);
    }

    public void gameStart(Person p, Computer c, int round) {

        System.out.println("玩家:"+p.getUsername()+"大战电脑:"+c.getUsername()+":"+round
        +"局定输赢!");

    }

    public void showFinalResult(Person p, Computer c) {
        System.out.println(p.getScore()+"\t"+c.getScore());
        if (p.getScore()>c.getScore()){
            System.out.println("恭喜玩家"+p.getUsername()+"取得了最终的胜利!");
        }else if(p.getScore()<c.getScore()){
            System.out.println("很遗憾,"+p.getUsername()+"你输了!");
        }else{
            System.out.println("双方积分相等,平局结束,再接再厉!");
        }
    }
}


7.Main类

import bean.Computer;
import bean.Person;
import controller.Justice;
import view.Views;

public class Main {
    static Views v = new Views();
    static Justice justice = new Justice();

    public static void main(String[] args) {
/*     Person p=new Person();
       p.setUsername("张三丰");
        int hand = p.hand();
        Computer c=new Computer();
        int hand1 = c.hand();
        v.show(p,hand);
        v.show(c,hand1);
        int result = justice.judge(p, hand, c, hand1);
        v.showResult(p,c,result);*/
        gameStart();
    }

    private static void gameStart() {
        v.welcome();
        String username = v.inputName();
        Person p = new Person();
        p.setUsername(username);
        Computer c = new Computer();
        c.setUsername("阿尔法-狗");
        int round = v.inputRound();
        v.gameStart(p, c, round);
        for (int i = 0; i < round; i++) {
            int hand = p.hand();
            int hand1 = c.hand();
            v.show(p, hand);
            v.show(c, hand1);
            int result = justice.judge(p, hand, c, hand1);
            justice.addScore(p, c, result);
            v.showResult(p, c, result);
        }
        v.showFinalResult(p, c);
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以帮你实现一个简单的 Python 人机猜拳游戏。以下是代码示例: ```python import random print("欢迎来到人机猜拳游戏!") print("请输入你要出的手势:1-石头,2-剪刀,3-布") # 用户出拳 player = input() while player not in ['1', '2', '3']: print("输入有误,请重新输入!") player = input() player = int(player) # 电脑出拳 computer = random.randint(1, 3) # 判断胜负 if player == computer: print("平局!") elif (player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1): print("恭喜你,你赢了!") else: print("很遗憾,你输了!") ``` 运行程序后,用户需要输入要出的手势,程序会随机生成电脑出的手势,并判断胜负,最后输出结果。你可以根据需要对代码进行修改和优化。 ### 回答2: Python人机猜拳游戏是一个简单而有趣的项目。在这个游戏中,用户可以与计算机进行猜拳,通过Python代码实现游戏的进行和结果的显示。 首先,我们需要定义玩家和计算机的选择。石头、剪刀和布分别用数字1、2、3表示。然后,我们需要生成计算机的随机选择,使用random库中的randint函数。用户可以通过输入选择:1代表石头,2代表剪刀,3代表布。 接下来,我们需要比较玩家和计算机的选择。根据猜拳的规则,石头战胜剪刀,剪刀战胜布,布战胜石头。根据这些规则以及用户和计算机的选择,我们可以判断出胜负关系并显示结果。 最后,我们可以给用户一个选择继续游戏还是退出游戏的选项。如果用户选择继续游戏,我们将再次执行游戏的步骤,让用户和计算机继续猜拳。如果用户选择退出游戏,我们将结束游戏。 通过以上的步骤,我们可以实现一个完整的Python人机猜拳游戏。这个游戏不仅可以帮助用户学习代码实现,还能够提供一个娱乐的方式,让用户和计算机进行互动。希望这个简要的回答能够对你有所帮助。 ### 回答3: 人机猜拳游戏是一种简单而有趣的游戏,可以用Python编写实现。下面是一个基本的人机猜拳游戏的代码示例,具体规则如下: 1. 玩家通过在控制台输入1,2或3来选择出拳,其中1代表剪刀,2代表石头,3代表布。 2. 电脑会随机选择1,2或3作为出拳。 3. 根据游戏规则,剪刀胜布,布胜石头,石头胜剪刀,如果两者一样,则为平局。 4. 最后会输出游戏结果,显示玩家和电脑的出拳以及胜负结果。 以下是代码示例: ```python import random def play_game(player_choice): computer_choice = random.randint(1, 3) if player_choice == computer_choice: result = "平局" elif (player_choice == 1 and computer_choice == 3) or \ (player_choice == 2 and computer_choice == 1) or \ (player_choice == 3 and computer_choice == 2): result = "你赢了!" else: result = "电脑赢了!" choices = ["剪刀", "石头", "布"] print("你的选择:", choices[player_choice - 1]) print("电脑的选择:", choices[computer_choice - 1]) print("结果:", result) print("欢迎来到人机猜拳游戏!") print("请按下面方式选择:") print("1.剪刀") print("2.石头") print("3.布") player_choice = int(input("请选择(输入相应数字):")) if player_choice < 1 or player_choice > 3: print("请输入有效的选择!") else: play_game(player_choice) ``` 通过运行上述代码,就可以开始玩人机猜拳游戏了。玩家输入1、2或3来选择出拳,程序会显示出拳结果和胜负情况。游戏的随机性和简单规则使得整个过程既有趣又富有挑战性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值