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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 19:10   #1
Apasik
Новичок
Джуниор
 
Регистрация: 29.05.2012
Сообщений: 1
По умолчанию AI для крестики-нолики

Добрый день. Кому не трудно помогите дописать суда игру с компьютером.

Код:
#include <iostream>

char board[9] = {}; 

void clearscreen(){
  for(int i = 0; i<40; i++){
    std::cout<<std::endl;
  }
}

void clearboard(){
  for(int i = 0; i<9; i++){
    board[i] = '-';
  }
}

bool has_wonQ(char player){
  
  int wins[][3] = {{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7},
                    {2,5,8}, {0,4,8}, {2,4,6}};

  for(int i = 0; i<8; i++){
    int count = 0;
    for(int j = 0; j<3; j++){
      if(board[wins[i][j]] == player) 
        count++; 
    }
    if(count == 3){
      return true;
    }
  }
  return false;
}

void print_board(std::string indent){
    std::cout << std::endl;  
    std::cout<<indent<<"-"<<board[6]<<"-|-"<<board[7]<<"-|-"<<board[8]<<"-\n";
	std::cout<<indent<<"-"<<board[3]<<"-|-"<<board[4]<<"-|-"<<board[5]<<"-\n";
	std::cout<<indent<<"-"<<board[0]<<"-|-"<<board[1]<<"-|-"<<board[2]<<"-\n";
}

int get_move(){
	std::cout<<"\nMove options: \n";
	std::cout<<"-7-|-8-|-9-" << std::endl;
	std::cout<<"-4-|-5-|-6-" << std::endl;
	std::cout<<"-1-|-2-|-3-" << std::endl;
	std::cout<<"\n";

	print_board("");
	std::cout << "\Vash hod: "; 
	
	int move;
	std::cin >> move;
	while(move > 9 || move < 1 || board[move-1] != '-'){
		std::cout<<"Vvedite 4islo ot 1-9: \n";
		std::cin >> move;
	}
	return move;
}
char play_and_get_winner(){
  int turn = 1;
  
  while(!has_wonQ('X') && !has_wonQ('O')){
          clearscreen();          
          int move = get_move();
          clearscreen();
          if(turn%2 == 1){
             board[move-1]='X';
             if(has_wonQ('X')){
                std::cout << "Pobedil igrok X!\n";
                return 'X';
             }
          }	
          else{ 
             board[move-1]='O';
             if(has_wonQ('O')){
                std::cout << "pobedil igrok O!\n";
                return 'O';
             }
          }
      turn++;
      if(turn == 10){
        std::cout << "\t Nichya!\n"; 
        return 'D';
      }
  }

}

int main(){
        std::cout<<"Dobro pojalovat!\n\n";
        std::string reply = "y";
        int x_wins=0, o_wins=0, ties=0;

        while(reply == "y"){
          clearboard();
          char winner = play_and_get_winner();
          print_board("\t  ");
          
          
          std::cout << "\nIgraem eshe? (y/n): ";
          std::cin  >> reply; 
          while(reply != "y" && reply != "n"){
            std::cout << "Vvedite vernoe zna4enie (y/n):";
            std::cin >> reply;
          }      
        } 

	return 0;
}
Apasik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритм для изменения скорости игры крестики нолики tml2110 Помощь студентам 1 17.12.2011 16:19
Алгоритм минимакс (minimaxing) для игры крестики-нолики 3х3 JustFree Помощь студентам 1 11.10.2011 16:35
минимакс для игры крестики нолики Ежик Помощь студентам 2 17.05.2010 13:21
Крестики-Нолики Linker88 Паскаль, Turbo Pascal, PascalABC.NET 14 30.06.2009 22:24
крестики-нолики {PatRioT} Паскаль, Turbo Pascal, PascalABC.NET 4 14.05.2009 13:24