首页 > 编程语言 >想到了个童年小游戏,2个人4只手就能玩,简单用JavaScript实现一下

想到了个童年小游戏,2个人4只手就能玩,简单用JavaScript实现一下

时间:2024-12-26 14:56:04浏览次数:3  
标签:right const JavaScript else 小游戏 只手 opponent plusRight left

/**

 * 规则:双方各有左右2个数,初始值为1。每回合,可以将自身的一个数与对方的一个数相加,然后模10。

 * 如,第一回合你操作:你(1 1)机器人(1 1)--> 你(1 2)机器人(1 1)

 * 下回合机器人操作:你(1 2)机器人(1 1)--> 你(1 2)机器人(1 3)

 * 第三回合你操作:你(1 2)机器人(1 3)--> 你(1 5)机器人(1 3)

 * ……

 * 直到有一方的左右2个数都为0,则为胜者,游戏结束。

 */

  

const readline = require('readline');

  

const readl = readline.createInterface({

    input: process.stdin,

    output: process.stdout

});

  

class player {

    constructor(name, left, right) {

        this.name = name

        this.left = left

        this.right = right

        this.finalNumber = 0

        console.log("player:" + this.name + " ~ " + this.left + " " + this.right)

    }

    plusLeft(number) {

        this.left = (this.left + number) % 10

        console.log("player:" + this.name + " ~ " + this.left + " " + this.right)

    }

    plusRight(number) {

        this.right = (this.right + number) % 10

        console.log("player:" + this.name + " ~ " + this.left + " " + this.right)

    }

    isWinner() {

        if (this.left == this.finalNumber && this.right == this.finalNumber) {

            console.log("Winner is " + this.name + "!");

            readl.close();

            return true

        } else {

            return false

        }

    }

    humanThink(opponent) {

        return new Promise((resolve, reject) => {

            readl.question('L + L: 1, L + R: 2, R + L: 3, R + R: 4, 请输入:', (answer) => {

                if (answer == 1) {

                    this.plusLeft(opponent.left)

                    resolve(false)

                } else if (answer == 2) {

                    this.plusLeft(opponent.right)

                    resolve(false)

                } else if (answer == 3) {

                    this.plusRight(opponent.left)

                    resolve(false)

                } else if (answer == 4) {

                    this.plusRight(opponent.right)

                    resolve(false)

                } else {

                    console.log("输入错误,请重新输入!");

                    resolve(true)

                }

            });

        });

    }

    robotThink(opponent) {

        const plus = (a, b) => {

            return (a + b) % 10

        }

        const roll = () => {

            const now = new Date();

            const timestamp = now.getTime();

            console.log(timestamp);

            return timestamp % 2 == 0;

        }

        const ll = plus(this.left, opponent.left)

        const lr = plus(this.left, opponent.right)

        const rl = plus(this.right, opponent.left)

        const rr = plus(this.right, opponent.right)

        if (ll == this.finalNumber) {

            this.plusLeft(opponent.left)

        } else if (lr == this.finalNumber) {

            this.plusLeft(opponent.right)

        } else if (rl == this.finalNumber) {

            this.plusRight(opponent.left)

        } else if (rr == this.finalNumber) {

            this.plusRight(opponent.right)

        } else {

            if (this.left == this.finalNumber) {

                if (roll()) {

                    this.plusRight(opponent.left)

                } else {

                    this.plusRight(opponent.right)

                }

            } else if (this.right == this.finalNumber) {

                if (roll()) {

                    this.plusLeft(opponent.left)

                } else {

                    this.plusLeft(opponent.right)

                }

            } else {

                if (roll()) {

                    if (roll()) {

                        this.plusRight(opponent.left)

                    } else {

                        this.plusRight(opponent.right)

                    }

                } else {

                    if (roll()) {

                        this.plusLeft(opponent.left)

                    } else {

                        this.plusLeft(opponent.right)

                    }

                }

            }

        }

    }

}

  

const player1 = new player("You", 1, 1)

const player2 = new player("The robot", 1, 1)

  

let round = 1

  

const game = async () => {

    console.log("round:", round)

    if (round % 2 == 1) {

        let res = true

        while (res) {

            res = await player1.humanThink(player2)

        }

    } else {

        player2.robotThink(player1)

    }

    if (!player1.isWinner() && !player2.isWinner()) {

        round = round + 1

        game()

    }

}

  

game()

标签:right,const,JavaScript,else,小游戏,只手,opponent,plusRight,left
From: https://www.cnblogs.com/12345abc/p/18632813

相关文章

  • 为孩子准备的 第一个python编程学习案例-pygame小游戏
    为孩子准备的第一个python编程学习案例python安装IDE安装thonny开发第一个小游戏-避坑指南最终运行通过的小游戏参考想指导孩子进行python编程启蒙,自己研究了一下如何从零搭建python开发环境、安装配置基本库并运行一个游戏示例.python安装安装最新版本的python,......
  • JavaScript中的数组和函数在内存分别是如何存储的?
    在JavaScript中,数组和函数在内存中的存储方式涉及到JavaScript的内存管理机制,特别是堆(Heap)和栈(Stack)的使用。虽然这些概念在底层实现上可能因JavaScript引擎(如V8,SpiderMonkey等)的不同而有所差异,但我们可以从一个高层次的视角来理解它们。1.数组在内存中的存储数组在JavaScript......
  • JavaScript的对象属性描述符有哪些?分别有什么作用?
    在JavaScript中,对象的属性描述符主要分为两类:数据描述符和存取描述符。它们都具有以下属性:数据描述符:具有值的属性,该值可能是可写的,也可能不是。数据描述符具有以下属性:value:属性的值。默认是undefined。writable:当且仅当属性的值可能改变时为true。默认是false。enumer......
  • 用rust写了一个桌面小游戏,希望大家体验
    使用rust的游戏框架Bevy写了一个桌面游戏《推十点半》。地址https://github.com/davelet/poker-of-ten-half/releases/tag/release-0.1。没有打包,因为还在初期,只是能简单玩。所以需要下载到本地通过cargorun来体验。之前用fltk-rs写的json处理工具也希望大家体验:https:/......
  • 详细介绍 JavaScript 数组的常用方法
     1.数组元素访问和修改方法constarr=['a','b','c'];//添加/删除元素arr.push('d');//末尾添加元素,返回新长度arr.pop();//删除最后一个元素,返回被删除的元素arr.unshift('x');//开头添加元素,返回新长度arr.shift();......
  • JavaScript开发中常见问题代码和相关优化Demo参考3.0
    21. 不使用const和let问题代码:varx=10;if(true){varx=20;//这里的变量声明会提升并覆盖外部的x}console.log(x);//输出20解决方案:尽量使用const或let来代替var以避免变量提升问题。constx=10;if(true){constx=20;//不影响外部的x}cons......
  • [C++] 小游戏 能量 1.1.1 版本 zty出品
    前言今天zty带来的是能量1.1.1版本,好久没出游戏啦,大家给个赞呗,zty还要上学,发作品会少一点                           先 赞 后 看  养  成 习 惯               ......
  • web前端大作业:旅游网页主题网站设计——武汉旅游网页设计(11页)HTML+CSS+JavaScript (
    ......
  • 基于 Spring Boot、MyBatis Plus、MySQL、HTML、CSS、JavaScript、Vue.js、Redis 与 S
    1.项目概述1.1项目目标为学生提供个性化课程推荐,助力高效选课。构建师生交流社区,促进课程相关交流。实现课程与用户信息的高效管理。1.2功能概述用户管理:包括注册、登录、信息修改、角色管理。课程管理:课程发布、查询、修改、删除、选课操作、评价与推荐。交流社区:课......
  • JavaScript 解构(Destructuring)简介
    解构是ES6引入的一种语法,它允许从数组或对象中快速提取值,并将这些值赋给变量。解构使代码更加简洁、可读性更强,特别是在处理复杂的数据结构时。解构赋值分类数组解构赋值对象解构赋值嵌套解构默认值剩余(Rest)解构1.数组解构赋值基础用法从数组中按顺序提取值,赋给变......