鱼C论坛

 找回密码
 立即注册
查看: 5306|回复: 34

[技术交流] C++的一个小游戏,tic-tac-toe

[复制链接]
发表于 2014-2-22 11:30:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 andalousie 于 2014-2-22 13:16 编辑

书上的再加上自己写的终于完成的一个控制台小游戏tic-tac-toe(已经改正更新)
游客,如果您要查看本帖隐藏内容请回复

屏幕截图

屏幕截图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 12:22:32 | 显示全部楼层
看看什么小游戏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-22 12:41:07 | 显示全部楼层
本帖最后由 andalousie 于 2014-2-22 12:49 编辑

有点点小bug,改了应该会好。其实就是好几次输入同样的move也会可以。。
board.h
#if !defined (BOARD_H)
#define BOARD_H
#include "move.h"
#include "stack.h"

class Board {
public:
   Board();                    //  constructor for initialization
   bool done()  const;          //  Test whether the game is over.
   void play(Move try_it);
   int evaluate()  const;
   int legal_moves(Stack<Move> &moves)  const;
   int worst_case()  const;
   bool better(int value, int old_value) const; //  Which parameter does the mover prefer?
   void print()  const;
   void instructions()  const;
   int  move_num() const { return moves_done; }
   bool used(Move player) const { return squares[player.row][player.col]; }
private:
   int squares[3][3];
   int moves_done;
   int the_winner() const;
};

#endif
main.cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
#include "stack.h"
#include "board.h"
#include "move.h"

int look_ahead(const Board &game, int depth, Move &recommended)
/*
Pre:  Board game represents a legal game position.
Post: An evaluation of the game, based on looking ahead
      depth moves, is returned.  The best move that can be found
      for the mover is recorded as Move recommended.
Uses: The classes Stack, Board, and Move, together with
      function look_ahead recursively.
*/
{
   if (game.done() || depth == 0)
      return game.evaluate();
   else {
      Stack<Move> moves;
      game.legal_moves(moves);
      int value, best_value = game.worst_case();

      while (!moves.Empty()) {
         Move try_it;
         Move reply;
         try_it = moves.Top();
         Board new_game = game;
         new_game.play(try_it);
         value = look_ahead(new_game, depth - 1, reply);
         if (game.better(value, best_value)) { //  try_it is the best move yet found
            best_value = value;
            recommended = try_it;
         }
         moves.Pop();
      }
      return best_value;
   }
}

void wait (int seconds)
{
  clock_t endwait;
  endwait = clock () + seconds * CLOCKS_PER_SEC ;
  while (clock() < endwait);
}

int main()
{
   Board game;
   Move next_move;
   game.instructions();
   std::cout << " How much lookahead? ";
   int looka;
   std::cin >> looka;
   std::cout << " Which mode? a. One(first) b. One(second) c. Two d. automatic ";
   char mode;
   std::cin >> mode;
   while (!game.done()) {
      if (looka > 0)
         look_ahead(game, looka, next_move);
      else
      {
         Stack<Move> moves;
         game.legal_moves(moves);
         next_move = moves.Top();
      }
      int expected;
      switch(mode)
      {
         case 'a':
         {
            if(game.move_num() % 2 == 1) goto automatic;
            std::cout << " Your move(row column) ";
            Move player;
            expected = look_ahead(game, looka, player);
            std::cin >> player.row >> player.col;
            while(game.used(player))
            {
               std::cout << "The position has been used. Again, your move(row column) "
               std::cin >> player.row >> player.col;
            }
            game.play(player); system("cls"); game.print();
            if(expected == look_ahead(game, looka, player))
               std::cout << "Your move is so right.";
            else
               std::cout << "Your move is not best.";
            break;
         }
         case 'b':
         {
            if(game.move_num() % 2 == 0) goto automatic;
            std::cout << " Your move(row column) ";
            Move player;
            expected = look_ahead(game, looka, player);
            std::cin >> player.row >> player.col;
            while(game.used(player))
            {
               std::cout << "The position has been used. Again, your move(row column) "
               std::cin >> player.row >> player.col;
            }
            game.play(player); system("cls"); game.print();
            if(expected == look_ahead(game, looka, player))
               std::cout << "Your move is so right.";
            else
               std::cout << "Your move is not best.";
            break;
         }
         case 'c':
         {
            std::cout << " Your move(row column) ";
            Move player;
            expected = look_ahead(game, looka, player);
            std::cin >> player.row >> player.col;
            while(game.used(player))
            {
               std::cout << "The position has been used. Again, your move(row column) "
               std::cin >> player.row >> player.col;
            }
            game.play(player); system("cls"); game.print();
            if(expected == look_ahead(game, looka, player))
               std::cout << "Your move is so right.";
            else
               std::cout << "Your move is not best.";
            break;
         }
         case 'd':
         default:
            automatic:
            {
               wait(1);
               game.play(next_move);
               system("cls");
               game.print();
            }
      }
   }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-22 12:57:54 | 显示全部楼层
很好很强大
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-22 13:23:54 | 显示全部楼层
感谢楼主分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-22 15:00:51 | 显示全部楼层
课后题在哪里?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-22 15:12:49 | 显示全部楼层
什么小游戏,看看...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-22 15:13:17 | 显示全部楼层
??????????????????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-22 15:28:24 | 显示全部楼层
什么东西。来顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-23 13:49:02 | 显示全部楼层
xiexielouzhu
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-23 14:52:33 | 显示全部楼层
(⊙o⊙)好腻害的赶脚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-23 15:23:19 | 显示全部楼层
先看看哈  谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-23 16:32:29 | 显示全部楼层
这个不错{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-23 17:55:19 | 显示全部楼层
顶!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-23 19:20:15 | 显示全部楼层
see yi see
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 07:42:32 | 显示全部楼层
谢谢楼主  楼主大爱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 15:38:35 | 显示全部楼层
{:1_1:}你看看你拉进来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 16:10:56 | 显示全部楼层
keyihenhao
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 17:24:37 | 显示全部楼层
来看下咯。
。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-25 17:26:22 | 显示全部楼层
支持好好学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 02:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表