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