C#(すごろくゲーム)

C#

C#で以下のようなすごろくゲームを作ってみよう!
[enter]とある部分は入力待ちで停止し、エンターキーを入力すると先に進むことを意味する。
なお、サイコロの目は1~6である。

実行例

スゴロクゲーム
あなたの番です。[enter]
4が出ました
••••P•••••••••G
C•••••••••••••G
comの番です。[enter]
4が出ました
••••P•••••••••G
••••C•••••••••G
あなたの番です。[enter]
3が出ました
•••••••P••••••G
••••C•••••••••G
comの番です。[enter]
1が出ました
•••••••P••••••G
•••••C••••••••G
あなたの番です。[enter]
3が出ました
••••••••••P•••G
•••••C••••••••G
comの番です。[enter]
5が出ました
••••••••••P•••G
••••••••••C•••G
あなたの番です。[enter]
6が出ました
••••••••••••••P
••••••••••C•••G
あなたの勝ちです

解答例(オブジェクト指向を使わないバージョン)

using System;
using System.Linq;

namespace sugoroku {
    class MainClass {
        const int GOAL_POS= 15;
        public static void Main(string[] args) {
            Random rand = new Random();
            string[] names = { "あなた", "com" };
            string[] marks = { "P", "C" };
            int[] playersPos = { 1, 1};
            int playersCount = names.Length;
            Console.WriteLine("スゴロクゲーム");
            for(int i=0; ; i++) {
                Console.Write($"{names[i % playersCount]}の番です。");
                Console.ReadLine();
                int dice = rand.Next(1, 7);
                Console.WriteLine($"{dice}が出ました");
                playersPos[i % playersCount] += dice;
                bool isGoal = false;
                if (playersPos[i % playersCount] >= GOAL_POS) {
                    playersPos[i % playersCount] = GOAL_POS;
                    isGoal = true;
                }
                for(int j = 0; j < playersCount; j++) {
                    DisplayPos(marks[j % playersCount], playersPos[j % playersCount], GOAL_POS);
                }
                if (isGoal) {
                    Console.WriteLine($"{names[i% playersCount]}の勝ちです");
                    break;
                }
            }
        }
        static void DisplayPos(string mark,int pos,int goalPos) {
            for(int i = 1; i <=goalPos; i++) { 
                    if (pos != goalPos && i == goalPos) {
                        Console.Write("G");
                    } else if(i==pos){
                        Console.Write(mark);
                    } else {
                        Console.Write("•");
                    }
            }
            Console.WriteLine();
        }
    }   
}

オブジェクト指向を使うバージョン

using System;
using System.Collections.Generic;

namespace sugorokuOOP {
    class MainClass {
        public static void Main(string[] args) {
            Random rand = new Random();
            var players = new List<Player> {
                new Player("あなた","P",1),
                new Player("com","C",1),
                //new Player("hoge","H",1)
            };
            Console.WriteLine("スゴロクゲーム");
            for(int i=0; ; i++) {
                Player currentPlayer = players[i % players.Count];
                Console.Write($"{currentPlayer.Name}の番です。");
                Console.ReadLine();
                int num = rand.Next(1, 7);
                Console.WriteLine($"{num}がでました。");
                currentPlayer.Move(num);
                players.ForEach(v => v.DisplayPos());
                if (currentPlayer.IsGoal) {
                    Console.WriteLine($"{currentPlayer.Name}の勝ちです。");
                    break;
                }
            }
        }
    }
    class Player {
        const int GOAL_POS = 15;
        public string Name { get; set; }
        public string Mark { get; set; }
        public int Pos { get; set; }
        public bool IsGoal { get; set; }
        public Player(string name, string mark, int pos) {
            Name = name;
            Mark = mark;
            Pos = pos;
        }
        public void Move(int num) {
            Pos = Math.Min(Pos + num, GOAL_POS);
            if (Pos == GOAL_POS) {
                IsGoal = true;
            }
        }
        public void DisplayPos() {
            for (int i = 1; i <= GOAL_POS; i++) {
                if (Pos != GOAL_POS && i == GOAL_POS) {
                    Console.Write("G");
                } else if (i == Pos) {
                    Console.Write(Mark);
                } else {
                    Console.Write("•");
                }
            }
            Console.WriteLine();
        }
    }
}

コメント

タイトルとURLをコピーしました