Перевод кода с 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();
}
}