21点游戏

// 21点游戏 分为人机对战和人人对战

// 玩家每次抽一张牌 牌的点数为1-10点随机数 谁更接近21点谁就获胜

let readline = require("readline-sync");

// 清屏函数

let clear = () => process.stdout.write(process.platform === ‘win32‘ ? ‘\x1Bc‘ : ‘\x1B[2J\x1B[3J\x1B[H‘);

// 抽牌函数 接收一个参数 玩家对象

let takeCard = function (player) {

let point = Math.floor(Math.random() * 10 + 1); // 随机获取一个点数

console.log(`你抽取到的点数为:${point}`);

player.titlePoint += point; // 改变玩家对象的总点数

}

// 结果比较函数 接收2个参数 两个玩家对象

let judge = function (player1, player2) {

if (player1.titlePoint > player2.titlePoint) {

return 1;

}

else if (player1.titlePoint < player2.titlePoint) {

return 2;

}

else {

return 0;

}

}

// 主函数

let main = function () {

let useSys = true; // 是否使用系统 默认值true代表一直使用

while (useSys) {

clear();

console.log("欢迎来到21点的世界");

console.log("请选择游戏选项: 1.单人模式 2.双人模式 3.游戏说明 4.退出游戏");

let funcSelect = parseInt(readline.question(""));

switch (funcSelect) {

// 单人模式

case 1:

{

// 首先初始化两个对象,一个玩家,一个电脑

let player = { victory: 0, titlePoint: 0 };

let computer = { victory: 0, titlePoint: 0 };

let continuePlay = true; // 是否继续单人模式

while (continuePlay) {

let isTakeCard = true; // 玩家是否有资格抽取下一张牌 默认是true 有资格抽取

// 玩家抽牌的循环

while (isTakeCard) {

clear();

console.log(`当前的总点数为:${player.titlePoint}`);

console.log("是否要抽取一张牌?(Y/N)");

let isTake = readline.question("");

switch (isTake) {

case "Y":

case "y":

takeCard(player); // 用户已经抽取了一张牌,里面有点数了

// 玩家每抽取一张牌,都要进行是否超过21点的判断 如果超过21点,就不能继续抽牌了

// 直接将isTakeCard值改为false

if (player.titlePoint > 21) {

console.log("你已经爆炸了!");

readline.question("");

isTakeCard = false;

break;

}

console.log("\n按回车键继续");

readline.question("");

break;

case "N":

case "n":

isTakeCard = false;

break;

default:

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

readline.question("");

}

}

// 如果退出了上面的while,说明两种情况,一是玩家爆了,二是玩家主动退出来的

// 所以我们首先判断玩家的总点数是否大于21

if (player.titlePoint > 21) {

console.log("电脑获胜");

computer.victory++;

}

else {

// 如果没有进入上面的if,说明玩家是主动退出来的

// 那么我们就让电脑对象生成总点数,然后将两个对象传入judge函数进行比较

computer.titlePoint = Math.floor(Math.random() * 7 + 15); // 电脑随机的总点数为15-21的随机数

console.log(`你的总点数为${player.titlePoint},电脑的总点数为${computer.titlePoint}`);

let result = judge(player, computer);

// 根据judge函数返回的结果来显示不同的信息

switch (result) {

case 0:

console.log("本局为平局,不加分");

break;

case 1:

console.log("玩家获胜");

player.victory++;

break;

case 2:

console.log("电脑获胜");

computer.victory++;

break;

}

}

// 打印信息

console.log("\n当前比分如下:");

console.log(`玩家:${player.victory} vs 电脑:${computer.victory}`);

readline.question("");

// 询问玩家是否要继续单人模式 如果不继续了,直接将continuePlay修改为false

while (true) {

console.log("是否继续游戏?(Y/N)");

let isAgain = readline.question("");

// 如果要继续单人模式 那么需要将两个对象的总点数重置为0

if (isAgain === ‘Y‘ || isAgain === ‘y‘) {

player.titlePoint = 0;

computer.titlePoint = 0;

break;

}

else if (isAgain === ‘N‘ || isAgain === ‘n‘) {

continuePlay = false;

break;

}

else {

console.log("输入有误,请重新输入\n");

}

}

}

// 能够来到这里,说明玩家输入的n,这时continuePlay的值为false

// 打印最终结果即可

clear();

console.log("最终比分如下:");

console.log(`玩家:${player.victory} vs 电脑:${computer.victory}`);

console.log("\n按回车键返回");

readline.question("");

}

break;

// 双人模式

case 2:

{

// 和单人游戏模式一样,还是初始化两个对象,不过这两个对象多了一个isTakeCard属性

let player1 = { victory: 0, titlePoint: 0, isTakeCard: true };

let player2 = { victory: 0, titlePoint: 0, isTakeCard: true };

// continuePlay变量表示是否继续双人模式

let continuePlay = true;

while (continuePlay) {

// 根据两个玩家对象的isTakeCard属性值判断是否抽牌,只要两个对象有一个属性值为true就会进入while循环

while (player1.isTakeCard || player2.isTakeCard) {

// 根据玩家1的isTakeCard属性值来判断玩家1是否抽牌

if (player1.isTakeCard) {

let inputValidate = true; // 此变量为输入验证 用于后面验证玩家的输入

while (inputValidate) {

clear();

// 在抽牌之前首先打印当前的点数信息,然后开始询问玩家是否抽牌

console.log("总点数:")

console.log(`玩家A:${player1.titlePoint} vs 玩家B:${player2.titlePoint}`);

console.log("玩家A 是否抽牌?(Y/N)");

let isTake = readline.question("");

switch (isTake) {

case "Y":

case "y":

inputValidate = false; // 做输入验证

takeCard(player1); // 抽一张牌

readline.question("");

// 大于21,直接将两个玩家的isTakeCard都修改为false,这样可以退出上上个while

if (player1.titlePoint > 21) {

player1.isTakeCard = false;

player2.isTakeCard = false;

}

break;

case "N":

case "n":

// 代表玩家不抽牌了,将isTakeCard属性改为false

inputValidate = false;

player1.isTakeCard = false;

break;

default:

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

readline.question("");

}

}

}

// 和上面相同

if (player2.isTakeCard) {

let inputValidate = true;

while (inputValidate) {

clear();

console.log("总点数:")

console.log(`玩家A:${player1.titlePoint} vs 玩家B:${player2.titlePoint}`);

console.log("玩家B 是否抽牌?(Y/N)");

let isTake = readline.question("");

switch (isTake) {

case "Y":

case "y":

inputValidate = false;

takeCard(player2);

readline.question("");

if (player2.titlePoint > 21) {

player1.isTakeCard = false;

player2.isTakeCard = false;

}

break;

case "N":

case "n":

inputValidate = false;

player2.isTakeCard = false;

break;

default:

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

readline.question("");

}

}

}

}

// 代码来到这里说明两个玩家的isTakeCard都为false,接下来直接进行比较即可

if (player1.titlePoint > 21) {

console.log("玩家A已爆炸!");

console.log("玩家B获胜");

player2.victory++;

}

else if (player2.titlePoint > 21) {

console.log("玩家B已爆炸!");

console.log("玩家A获胜");

player1.victory++;

}

else {

let result = judge(player1, player2);

switch (result) {

case 0:

console.log("本局为平局,不加分");

break;

case 1:

console.log("玩家A获胜");

player1.victory++;

break;

case 2:

console.log("玩家B获胜");

player2.victory++;

break;

}

}

console.log("\n当前比分如下:");

console.log(`玩家A:${player1.victory} vs 玩家B:${player2.victory}`);

readline.question("");

while (true) {

console.log("是否继续游戏?(Y/N)");

let isAgain = readline.question("");

if (isAgain === ‘Y‘ || isAgain === ‘y‘) {

player1.titlePoint = 0;

player2.titlePoint = 0;

player1.isTakeCard = true;

player2.isTakeCard = true;

break;

}

else if (isAgain === ‘N‘ || isAgain === ‘n‘) {

continuePlay = false;

break;

}

else {

console.log("输入有误,请重新输入\n");

}

}

}

clear();

console.log("最终比分如下:");

console.log(`玩家A:${player1.victory} vs 玩家B:${player2.victory}`);

console.log("\n按回车键返回");

readline.question("");

}

break;

// 游戏说明

case 3:

{

clear();

console.log("单人模式规则:");

console.log("单人模式下玩家可以连续抽牌,每回合抽取的点数为1-10点中任意一个点数");

console.log("所有点数相加不能超过21点,然后总点数和电脑点数进行比较,谁更接近21点谁就算胜利\n");

console.log("双人模式规则:");

console.log("两名玩家轮流抽牌,在不超过21点的前提下进行总点数的比较,谁更接近21点谁就算胜利\n");

console.log("按回车键返回");

readline.question("");

}

break;

// 退出游戏

case 4:

{

// 要退出游戏 直接将useSys修改为false

useSys = false;

}

break;

}

}

clear();

console.log("Thank you for playing");

}

main();

原文地址:https://www.cnblogs.com/fatingGoodboy/p/11409860.html

时间: 2024-11-13 06:54:09

21点游戏的相关文章

Javascript----实现21点游戏

1.效果 洗牌: 要牌: 亮牌: 2.代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>21点游戏</title> <style type="text/css"> .container { width: 1080px; height: 600px; border: 1px solid #cccccc; mar

21点游戏,命令行的,面像过程的写法。Ruby

21点游戏,命令行的,面像过程的写法. ruby 的写法以后再试试. # this is game 21 point # 操作命令符 空没有操作,n下一步,抽牌:w亮牌结束:l认输 $ope = '' $prompt = '>' $x1 = 0 $x2 = 0 $x3 = 0 $pc = 0 $u1 = 0 $u2 = 0 $u3 = 0 $over = '' def out_main(a = 0, b=0, c=0, pc = 0, us1=0, us2=0, us3=0) puts "

用python实现自动玩Npubits的21点游戏

用python实现自动玩Npubits的21点游戏 21点的主页面 https://--- (此处不提供链接,用户直接在网站首页点击21点后,地址栏的链接便是.) 需要知道的关键点 (写代码时用来抓取数据的关键点) 1. 等待开局 若之前的21点还没有结束(暂时没有对手上线),那么不能开局,需等待之前的结束.若需等待,主页面包含以下内容 <button type="submit" class="btn btn-default">刷新</button

Jq之21点游戏

最近在看Jq,里面有个21点的游戏挺不错的,也是需要一点时间去理解~分享一下 html结构 <!DOCTYPE html> <html> <head> <title>Head First Black Jack</title> <meta http-equiv="Content-type" content="text/html;charset=utf-8"> <link href="

21点游戏java实现

21点的基本知识 21点是世界上比较流行的扑克游戏项目 除掉大小王的一副扑克牌,共计52张牌 21点不区分花色,其中A----10均代表扑克牌本身的点数J Q K代表10点 区分庄家和闲家,其中闲家可以优先要牌 而庄家在与闲家点数一样大的情况下,庄家赢,当有一方点数超过21点则另一方自动获胜,庄家的点数如果正好是21点,那么庄家直接获胜,其他情况以点数大的获胜 流程设计: 人机对战模式! 1由用户输入选择作庄还是作闲,电脑自动成为另一方 2随机为双方发两张牌 3询问闲家是否要牌,一直到闲家不再要

编程练习,自己做的21点游戏

#include <stdio.h> #include <time.h> #include <stdlib.h> int N; //牌序 int integral_player; //玩家积分 int integral_computer; //电脑积分 int card[52]= {102,103,104,105,106,107,108,109,110,111,112,113,114,202,203,204,205,206,207,208,209,210,211,212

编了个21点游戏 结果错误好多的样子T T求指点

#include<stdio.h>#include<stdlib.h>#include<string.h>int n1=2,n2=2;int main(){    void Game();    char str[10];    printf("if you want to start the game,enter start,otherwise log out\n");    gets(str);    if(strcmp(str,"st

C++小游戏:扑克牌21点

21点扑克牌游戏: 程序说明:该程序是模拟21点扑克牌游戏,玩家最多可以要5张牌,但是如果牌的点数之和超过21点,则自动出局,在不超过21点的情况下,玩家与庄家比牌的大小,大者为赢家 程序片段分析: [1]头文件处: #include<iostream> #include<cstdlib> #include<ctime> using namespace std; cstdlib这个头文件里面,等价与stdlib,因为要生成随机数,需要调用函数rand和srand,百科里

游戏系列~21点扑克牌(1)

#include<ctime>//#include<stdio>#include<iostream>//#include<stdlib>#include<conio.h>#include <bits/stdc++.h> using namespace std;//定义扑克类class game{private:int wins,lose,draw,money;int bet,playerturns,cputurns;float pla