Перевод кода с 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д