Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2014, 23:55   #1
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию крестики нолики

Подскажите пожалуста как написать функцию которая бы оставляла выбранное заранее крестик или нолик и продолжала игру????
А то у меня при каждом вводе все обновляется заранее спасибо...
mixon-21 вне форума Ответить с цитированием
Старый 04.03.2014, 23:57   #2
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace крестики_и_нолики
    {
    class Program
        {
      static  void nol()
            {
            int[] a=new int[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            int h=Convert.ToInt32( Console.ReadLine());

            switch ( h )
                {
                case 1:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                case 2:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                case 3:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                case 4:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                case 5:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                case 6:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                case 7:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                case 8:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                case 9:
                    for ( int i=0; i < 9; i++ )
                        {
                        if ( i == h - 1 )
                            Console.Write( 'O' );
                        else
                            Console.Write( a[i] );
                        if ( i % 3 == 2 )
                            Console.WriteLine();
                        }
                    break;
                default:
                    Console.WriteLine( "end" );
                    break;
                }
            }

Последний раз редактировалось mixon-21; 05.03.2014 в 00:02.
mixon-21 вне форума Ответить с цитированием
Старый 04.03.2014, 23:57   #3
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Код:
 static void Krest()
          {
          int[] a=new int[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
          int z=Convert.ToInt32( Console.ReadLine());

          switch ( z )
              {
              case 1:
                  for ( int i=0; i < 9; i++ )
                      {
                   if( i==z-1)
                      Console.Write ('X');
                      else
                      Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              case 2:
                  for ( int i=0; i < 9; i++ )
                      {
                      if ( i == z - 1 )
                          Console.Write( 'X' );
                      else
                          Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              case 3:
                  for ( int i=0; i < 9; i++ )
                      {
                      if ( i == z - 1 )
                          Console.Write( 'X' );
                      else
                          Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              case 4:
                  for ( int i=0; i < 9; i++ )
                      {
                      if ( i == z - 1 )
                          Console.Write( 'X' );
                      else
                          Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              case 5:
                  for ( int i=0; i < 9; i++ )
                      {
                      if ( i == z - 1 )
                          Console.Write( 'X' );
                      else
                          Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              case 6:
                  for ( int i=0; i < 9; i++ )
                      {
                      if ( i == z - 1 )
                          Console.Write( 'X' );
                      else
                          Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              case 7:
                  for ( int i=0; i < 9; i++ )
                      {
                      if ( i == z - 1 )
                          Console.Write( 'X' );
                      else
                          Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              case 8:
                  for ( int i=0; i < 9; i++ )
                      {
                      if ( i == z - 1 )
                          Console.Write( 'X' );
                      else
                          Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              case 9:
                  for ( int i=0; i < 9; i++ )
                      {
                      if ( i == z - 1 )
                          Console.Write( 'X' );
                      else
                          Console.Write( a[i] );
                      if ( i % 3 == 2 )
                          Console.WriteLine();
                      }
                  break;
              default:
                  Console.WriteLine( "end" );
                  break;
              }
          }
        static void Main()
            {
            int[] a=new int[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9};
            for ( int i=0; i < 9; i++ )
                {
                a[i]=i+1;
                    Console.Write(a[i]);
                if ( i % 3 == 2 )
                    Console.WriteLine();
                }
            nol();
           Krest();
            Console.ReadKey();
            }
            }
mixon-21 вне форума Ответить с цитированием
Старый 05.03.2014, 09:53   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
static int[] a;
const int Sz = 3;

static void Draw()
{
    for (int i = 0; i < Sz; i++)
    {
        for (int j = 0; j < Sz; j++)
            switch (a[i * Sz + j])
            {
                case -1:
                    Console.Write('X');
                    break;
                case 0:
                    Console.Write('O');
                    break;
                default: 
                    Console.Write(a[i * Sz + j]);
                    break;
            }
        Console.WriteLine();
    }
}

static void Turn(bool IsX)
{
    int h = 0;
    do
    {
        if (int.TryParse(Console.ReadLine(), out h) && h > 0 && h <= Sz * Sz && a[h - 1] > 0)
            a[h - 1] = IsX ? -1 : 0;
        else
            h = 0;
    }
    while (h == 0);
}

static void Main()
{
    a = new int[Sz * Sz] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int left = Sz * Sz;
    bool IsX = false;
    Draw();
    while (left > 0)
    {
        Turn(IsX);
        Draw();
        IsX = !IsX;
        left--;
    }
    Console.ReadKey();
}
Дальше (проверку выигрыша) сам думай.
Но не пиши такую лапшу, как у тебя в посте.
phomm вне форума Ответить с цитированием
Старый 05.03.2014, 17:49   #5
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

А можно пожалуста коментарии???
mixon-21 вне форума Ответить с цитированием
Старый 05.03.2014, 17:50   #6
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Код:
static int[] a;
const int Sz = 3;

static void Draw()
{
    for (int i = 0; i < Sz; i++)
    {
        for (int j = 0; j < Sz; j++)
            switch (a[i * Sz + j])
            {
                case -1:
                    Console.Write('X');
                    break;
                case 0:
                    Console.Write('O');
                    break;
                default: 
                    Console.Write(a[i * Sz + j]);
                    break;
            }
        Console.WriteLine();
    }
}

static void Turn(bool IsX)
{
    int h = 0;
    do
    {
        if (int.TryParse(Console.ReadLine(), out h) && h > 0 && h <= Sz * Sz && a[h - 1] > 0)
            a[h - 1] = IsX ? -1 : 0;
        else
            h = 0;
    }
    while (h == 0);
}

static void Main()
{
    a = new int[Sz * Sz] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int left = Sz * Sz;
    bool IsX = false;
    Draw();
    while (left > 0)
    {
        Turn(IsX);
        Draw();
        IsX = !IsX;
        left--;
    }
    Console.ReadKey();
}
Дальше (проверку выигрыша) сам думай.
Но не пиши такую лапшу, как у тебя в посте.
А можно пожалуста коментарии???
mixon-21 вне форума Ответить с цитированием
Старый 05.03.2014, 21:09   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Какие там комментарии, немного изменил твой код и в целом всё понятно и так.
Глобальный массив числе сделал (у тебя из-за его локальности как раз и была проблема), переписал в процедуру отрисовки поля - через двойной вложенный цикл и свитч. Переписал обе твои процедуры - "крест" и "нол" в одну - Turn с параметром булевым - мол ход крестика, в ней цикл считывает с консоли число пока оно не будет удовлетворять всем условиям - быть числом, правильным индексом массива и ячейка в массиве по данному индексу должна быть ещё незанята крестиком/ноликом, если всё ок - то эта ячейка и занимается соотвественно. Ну и главный метод с циклом - пока остались незанятые ячейки делать последовательно ход и отрисовку, менять сторону играющего и уменьшать кол-во незанятых.
phomm вне форума Ответить с цитированием
Старый 10.03.2014, 19:54   #8
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Намекните плиз как сделать проверку на выиграш или проиграш ноликов??? помогите плиз.
mixon-21 вне форума Ответить с цитированием
Старый 11.03.2014, 08:01   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Добавить функцию
Код:
while (left > 0)
    {
        Turn(IsX);
        Draw();
        if (CheckWin(IsX))
            break;
        IsX = !IsX;
        left--;
    }
Код:
static void CheckWin(bool IsX)
{
    bool result = false;
    // масса проверок*
    if (result)
        Console.WrilteLine("Выиграл игрок " + IsX? "за крестики": "за нолики");
    return result;
}
*Масса проверок - то, что Вам надо написать. Правила знаете ? Вот и пишите.
Проверяете горизонтали вертикали и диагонали массива а в циклах на одинаковые значения ( 0 и -1 соответственно) и выставляете result = true если проверка показала 3 одинаковых знака, остальной каркас я Вам написал.

И это, прекращайте канючить, вроде уж давно на форуме и репка есть, а всё не усвоили, что выпрашивание только раздражает. Наброски кода делайте, пробуйте своими силами, при затыках - пишите на форум, прикладывая наработки, объясняя ситуацию - мол хочу так и так, пишу код так и так, ожидаю то и то, но не вижу/ошибка/неточность. Тогда будет и помощь.

Последний раз редактировалось phomm; 11.03.2014 в 08:05.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Крестики - Нолики на С# RaTyS Фриланс 3 28.11.2011 23:11
Крестики нолики Anonim69 JavaScript, Ajax 8 08.12.2010 06:00
крестики нолики neformalblack Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 18.04.2010 19:04
КРЕСТИКИ-НОЛИКИ((( magadan Паскаль, Turbo Pascal, PascalABC.NET 8 02.05.2009 22:16
Крестики нолики Gorbunov Общие вопросы C/C++ 5 22.01.2009 16:04