Перевод кода с C++ на C#. Игра с датами

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста перевести код с с++ на с# !!!! Программа не сложная, про даты. Стратегия игры: Первый игрок сообщает какую-нибудь дату января. Каждый игрок на своем ходе называет более позднюю дату, увеличивая либо календарную дату в месяце, либо месяц, но не то и другое сразу. Если, например, начальной датой было 8 января, то можно перейти к 8 марта или к 12 января. Можно увеличить меньше: 9 января или 8 февраля; можно перейти сразу к 8 декабря или 31 января. Внимание: если вы переходите к 31 января, то ваш противник сможет в дальнейшем менять только месяцы, и притом лишь месяцы с 31 днем. Первый, кто доберется до 31 декабря, выигрывает. Буду очень благодарна!!! Вот код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
//--------Глобальные переменные
 
int day = 1; //текущий день
int month = 1; //текущий месяц
int isPlayerWon = 0; // Равно 1, если выиграл игрок
int isCompWon = 0; /*Равно 1, если выиграл компьютер
                   (нужно для вывода сообщения) */
 
                   //-------Объявление вспомогательных функций, их описание внизу программы
 
void Show(); //функция отображает день и месяц
 
void whatInc(); //функция позволяет игроку делать ход
 
void checkMonth(); /*проверяет, не пора ли увеличит месяц, если
                   если число дней превысило 30, 31 или 28 (в феврале)*/
 
void compTurn(); //ходит за компьютера
 
int checkWon(); /* функция проверяет, не достигнуто ли 31 декабря,
                если достигнуто, становится равной (возвращат) 1,
                если нет - 0 */

int main()
{
    do
    {
        cout << "Lets start a game! Please type in the date of January. (1-31)" << endl;
        cin >> day;
    } while ((day < 1) | (day >31)); /*начинаем игру, игроку надо ввести
                                     число января - от 1 до 31. Если ввести больше или меньше,
                                     то попросят ввести опять */
 
    do /*использум цикл do{ }while с постусловием,
       игрок с компьютером ходят, пока один не достигнет 31 декабря*/
    {
        //так как число выбирал игрок, первым ходит компьютер   
        Show(); //покажем, какая дата сейчас    
        compTurn(); //потом компьютер ходит
        if (checkWon() == 1) //если он выиграл, то прекращаем цикл do while
        {
            isCompWon = 1;
            break;
        }
        checkMonth(); //под конец проверим числа месяца
 
        Show(); //теперь ход игрока, почти то же самое
        whatInc(); //только другая процедура хода
        if (checkWon() == 1)
        {
            isPlayerWon = 1;
            break;
        }
        checkMonth();
    } while (isPlayerWon == 0 && isCompWon == 0); /*цикл работает, пока
                                              один не победит - хотя это излишне, так как
                                              в цикле уже есть условие для выхода - вместо этого
                                              здесь можно бы было сделать возможность выхода до победы*/
 
    Show(); //показать дату 31 декабря
            /*назвать победителя*/
    if (isPlayerWon == 1) cout << "The Player has won!" << endl;
    else cout << "The Computer has won!" << endl;
}
 
//--------------Вспомогательные функции
 
void Show() //показывает дату
{
    extern int day; /*обращение к глобальным переменным из функции,
                    надо использовать extern*/
    extern int month;
 
    //пишем день, месяц c числового значения заменяем на January, February и т.д.
    cout << "----------" << endl;
    cout << day << " ";
    switch (month) {
    case 1: cout << "January" << endl; break;
    case 2: cout << "February" << endl; break;
    case 3: cout << "March" << endl; break;
    case 4: cout << "April" << endl; break;
    case 5: cout << "May" << endl; break;
    case 6: cout << "June" << endl; break;
    case 7: cout << "July" << endl; break;
    case 8: cout << "August" << endl; break;
    case 9: cout << "September" << endl; break;
    case 10: cout << "October" << endl; break;
    case 11: cout << "November" << endl; break;
    case 12: cout << "December" << endl; break;
    }
    cout << "----------" << endl;
}
 
void whatInc() //ход игрока
{
    extern int day;
    extern int month;
    int dom; /*dom - сокращение Day Or Month - будет показыват,
             что увеличивать, дни или месяцы*/
 
    if (month == 12) //если уже декабрь, увеличивать можно только дни
    {
        do
        {
            cout << "December! You can only increase days(0)" << endl;
            cin >> dom;
        } while (dom != 0); //пока не выбран дни (0), программа будет спрашивать
    }
    else //если не декабрь, пусть игрок выбирает
    {
        cout << "Increase days(0) or months(1)?" << endl;
        cin >> dom;
    }
 
    if (dom == 0) //если ноль - увеличиваем день, если что-то другле, то месяц
    {
        day++;
        cout << "The Player has increased days" << endl;
    }
    else
    {
        month++;
        cout << "The Player has increased months" << endl;
    }
}
 
void checkMonth() /*функция, проверяет, не надо ли перейти на новый
                  месяц, если число уже 30, 31 или 28 (для февраля)*/
{
    extern int day;
    extern int month;
 
    /*если произошло так, что уже 29 февраля, то делаем первое число
    следующего месяца*/
    if ((day == 29) && (month == 2)) {
        day = 1;
        month++; //увеичить на один
    }
 
    //для других месяцев также, только с другими условиями
    if ((day == 32) && ((month == 1)
        | (month == 3)
        | (month == 5)
        | (month == 7)
        | (month == 8)
        | (month == 10)
        | (month == 12))) {
        day = 1;
        month++;
    }
 
    if ((day == 31) && ((month == 4) |
        (month == 6) |
        (month == 9) |
        (month == 11))) {
        day = 1;
        month++;
    }
}

void compTurn() //процедура хода компьютера с использованием функции rand()
{
    extern int day;
    extern int month;
    int dom = 0;
 
    if (month == 12) //если декабрь, то компьютер только дни
    {
        day++;
        cout << "The computer has increased days" << endl;
    }
    else
    {
        dom = rand() % 2; //выбор одного из двух - 0 или 1  
        if (dom == 0)
        {
            day++;
            cout << "The computer has increased days" << endl;
        }
        else
        {
            month++;
            cout << "The computer has increased months" << endl;
        }
    }
}

int checkWon() //становится равна 1, если уже 31 декабря
{
    extern int day;
    extern int month;
    if ((day == 31) && (month == 12))
        return 1;
    else
    return 0;
}

Решение задачи: «Перевод кода с C++ на C#. Игра с датами»

textual
Листинг программы
class Program
    {
        public static int day = new int(); //текущий день
        public static int month = new int(); //текущий месяц
        public static int isPlayerWon = new int(); // Равно 1, если выиграл игрок
        public static int isCompWon = new int();
        
        static void Show() //показывает дату
        {
            //пишем день, месяц c числового значения заменяем на January, February и т.д.
            Console.WriteLine("----------");
            Console.WriteLine("{0} ", day);
            switch (month)
            {
                case 1: Console.WriteLine("January"); break;
                case 2: Console.WriteLine("February"); break;
                case 3: Console.WriteLine("March"); break;
                case 4: Console.WriteLine("April"); break;
                case 5: Console.WriteLine("May"); break;
                case 6: Console.WriteLine("June"); break;
                case 7: Console.WriteLine("July"); break;
                case 8: Console.WriteLine("August"); break;
                case 9: Console.WriteLine("September"); break;
                case 10: Console.WriteLine("October"); break;
                case 11: Console.WriteLine("November"); break;
                case 12: Console.WriteLine("December"); break;
            }
            Console.WriteLine("----------");
        }
 
        static void whatInc() //ход игрока
        {
            int dom; /*dom - сокращение Day Or Month - будет показыват,
             что увеличивать, дни или месяцы*/
 
            if (month == 12) //если уже декабрь, увеличивать можно только дни
            {
                do
                {
                    Console.WriteLine("December! You can only increase days(0)");
                    dom = int.Parse(Console.ReadLine());
                } while (dom != 0); //пока не выбран дни (0), программа будет спрашивать
            }
            else //если не декабрь, пусть игрок выбирает
            {
                Console.WriteLine("Increase days(0) or months(1)?");
                dom = int.Parse(Console.ReadLine());
            }
 
            if (dom == 0) //если ноль - увеличиваем день, если что-то другле, то месяц
            {
                day++;
                Console.WriteLine("The Player has increased days");
            }
            else
            {
                month++;
                Console.WriteLine("The Player has increased months");
            }
        }
 
        static void checkMonth() /*функция, проверяет, не надо ли перейти на новый
                  месяц, если число уже 30, 31 или 28 (для февраля)*/
        {
 
            /*если произошло так, что уже 29 февраля, то делаем первое число
            следующего месяца*/
            if ((day == 29) && (month == 2))
            {
                day = 1;
                month++; //увеичить на один
            }
 
            //для других месяцев также, только с другими условиями
            if ((day == 32) && ((month == 1)
                | (month == 3)
                | (month == 5)
                | (month == 7)
                | (month == 8)
                | (month == 10)
                | (month == 12)))
            {
                day = 1;
                month++;
            }
 
            if ((day == 31) && ((month == 4) |
                (month == 6) |
                (month == 9) |
                (month == 11)))
            {
                day = 1;
                month++;
            }
        }
 
 
        static void compTurn() //процедура хода компьютера с использованием функции rand()
        {
            int dom = 0;
 
            if (month == 12) //если декабрь, то компьютер только дни
            {
                day++;
                Console.WriteLine("The computer has increased days");
            }
            else
            {
                Random rand = new Random();
                dom = rand.Next(0, 1); //выбор одного из двух - 0 или 1  
                if (dom == 0)
                {
                    day++;
                    Console.WriteLine("The computer has increased days");
                }
                else
                {
                    month++;
                    Console.WriteLine("The computer has increased months");
                }
            }
        }
 
        static int checkWon() //становится равна 1, если уже 31 декабря
        {
            if ((day == 31) && (month == 12))
                return 1;
            else
                return 0;
        }
        static void Main(string[] args)
        {
            day = 1; //текущий день
            month = 1; //текущий месяц
            isPlayerWon = 0; // Равно 1, если выиграл игрок
            isCompWon = 0;
            do
            {
                Console.WriteLine("Lets start a game! Please type in the date of January. (1-31)");
                day = int.Parse(Console.ReadLine());
            } while ((day < 1) | (day > 31)); /*начинаем игру, игроку надо ввестичисло января - от 1 до 31. Если ввести больше или меньше, то попросят ввести опять */
 
            do /*использум цикл do{ }while с постусловием,игрок с компьютером ходят, пока один не достигнет 31 декабря*/
            {
                //так как число выбирал игрок, первым ходит компьютер   
                Show(); //покажем, какая дата сейчас    
                compTurn(); //потом компьютер ходит
                if (checkWon() == 1) //если он выиграл, то прекращаем цикл do while
                {
                    isCompWon = 1;
                    break;
                }
                checkMonth(); //под конец проверим числа месяца
            
                Show(); //теперь ход игрока, почти то же самое
                whatInc(); //только другая процедура хода
                if (checkWon() == 1)
                {
                    isPlayerWon = 1;
                    break;
                }
                checkMonth();
            } while (isPlayerWon == 0 && isCompWon == 0); /*цикл работает, пока
                                              один не победит - хотя это излишне, так как
                                              в цикле уже есть условие для выхода - вместо этого
                                              здесь можно бы было сделать возможность выхода до победы*/
 
            Show(); //показать дату 31 декабря
                    /*назвать победителя*/
            if (isPlayerWon == 1) Console.WriteLine("The Player has won!");
            else Console.WriteLine("The Computer has won!");
 
            Console.ReadLine();
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5