我想做一个简单的纸牌游戏,但有啥问题?

Posted

技术标签:

【中文标题】我想做一个简单的纸牌游戏,但有啥问题?【英文标题】:I want to make a simple card game but what's wrong with it?我想做一个简单的纸牌游戏,但有什么问题? 【发布时间】:2021-07-03 13:35:09 【问题描述】:

该游戏使用 40 张牌,20 张红和 20 张绿。

卡片:1, 2, 3, 4, 5, ...., 20.

颜色:红色、绿色

它由两个玩家一起玩。球员的名字被取走。

选择要玩的牌张数。 (N

给玩家随机的 N'er 牌。

依次比较玩家 1 和玩家 2 的 N'er 牌。

如果比较的一张牌是绿色的,一张是红色的,那张牌是绿色的玩家的分数就会增加。

如果比较的两张卡片颜色相同,则卡片分数较高的玩家的分数增加。

玩家 1 和玩家 2 的牌和颜色都写在屏幕上。如Y1、K1、Y3

打印球员的分数。

得分较高的玩家被宣布为获胜者。

using System;

namespace Card_Game

    class Program
    
        static void Main(string[] args)
        
            int player1score=0, player2score=0;
            string player1, player2;
            Console.WriteLine("enter player name 1");
            player1 = Console.ReadLine();
            Console.WriteLine("enter player name 2");
            player2 = Console.ReadLine();
           
            int number;
            Console.WriteLine("Enter how many cards you want to be given, " +
                "you can choose a maximum of 20, there are 40 cards in total in the game.");
            number = Convert.ToInt32(Console.ReadLine());
           
                Random random = new Random();
            int s1=0, s2=0;
            for (int i = 0; i < number; i++)
                
               
                int player1card1 = random.Next(1, 3);
                /*if the number is 1 ,it means our card colour is green or number is 2,
                 * it means our card colour is red*/
                int player1card2 = random.Next(1, 21);
                int player2card1 = random.Next(1, 3);
                int player2card2 = random.Next(1, 21);
                Console.WriteLine("0 player's card is given", player1);
                
                Console.WriteLine( "colour :"+ player1card1);

                Console.WriteLine("number:" + player1card2);
                Console.WriteLine("0 player's card is given", player2);
                
                Console.WriteLine("colour :" + player2card1);
                
                Console.WriteLine("number :" + player2card2);
               
                if (player1card1 == 1 && player2card1 != 1)
                
                    player1score  ++;
                
                else if(player1card1 != 1 && player2card1 == 1)
                
                    player2score  ++;
                
                else
                
                    if (player1card2 > player2card2)
                        player1score ++;
                    else
                        player2score ++;
                

            
            if (player1score > player2score)
                Console.WriteLine("Player 0 wins with 1 points Score of player 2 " +
                     "3", player1, player1score, player2, player2score);
            else if (player1score < player2score)
                Console.WriteLine("Player 0 wins with 1 points Score of player 2 " +
                     "3", player2, player2score,player1, player1score);
            else
                Console.WriteLine("the game is drawn with 0 points ", player1score);

        
    

我想做的是通过生成2个随机数而不是定义单独的卡片来实现这个功能。

如果第一个随机数为 1,则卡片为绿色,另一张卡片为红色。但是这里有两个问题,卡片的数量是 20,当我定义随机数时,会出现相同的数字。怎么设置卡数相等?

【问题讨论】:

【参考方案1】:

想想纸牌游戏通常是如何玩的:

    首先,创建卡片组(打印时!) 然后洗牌(但还没有人有牌!) 卡片从洗好的牌堆中按顺序分发

因此,发牌时并没有确定牌 - 它们的随机性在洗牌时已经分配。当它们被洗牌时,它们已经存在了! 因此,为了使您的方法与此类似,您应该生成所有卡片,然后随机排序:

List<int> allCards = new List<int>();

// create the deck
for (int i = 0; i < 20; ++i) 
   allCards.Add(0); // one of each card
   allCards.Add(1);

var shuffledDeck = allCards.OrderBy(c => random.Next()).ToList(); // shuffle the deck

// get the cards for the persons hand

【讨论】:

感谢您的建议@Rob G

以上是关于我想做一个简单的纸牌游戏,但有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

我想做吃鸡游戏辅助工具,需要学习点啥?

如何使用 Parse (swift) 邀请用户加入多人游戏会话

如何保存游戏数据[关闭]

为啥我的简单 if 语句不起作用?

Unity中简单的游戏逻辑

我想做一个简单的图书管理系统,如何快速导入所需数据?