Програма перевірки логічного мислення - Курсовая работа

бесплатно 0
4.5 71
Розробка програми перевірки логічного мислення людини на мові програмування С , результатом якої є моделювання координатного переміщення. Визначення структури вхідних та вихідних даних, вибір мови програмування. Розгляд алгоритму рішення задачі.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
2.2 Визначення структури вхідних даних 2.3 Визначення структури вихідних данихАдже здається немає такої сфери людської діяльності, де не можна було б з користю застосувати обчислювальну машину для оцінки, інформаційно-довідкового обслуговування, планування, моделювання і т. п. І це різноманіття завдань переходить в різноманіття програм, які повинні розробляти програмісти. Одночасно вони звільняють програмістів від необхідності деталізувати програми до рівня занадто дрібних машинних команд і навіть від необхідності знати особливості конкретних обчислювальних машин.Програма перевірки логічного мислення людини полягає у написанні програми, яка виводить на екран монітору гральне поле, та символи Х та О на ньому, за допомогою яких користувач намагається обіграти компютер. Розробка Програми перевірки логічного мислення людини потрібна для того, щоб перевіряти логічне мислення людини. Програма повинна вміти: Розташовувати гральне поле 3х3 на екрані; Усі данні які виводить ця програма зберігаються у середовищі операційної системи. Програма „Статистика використання клавіатури" була розроблена на компютері такої конфігурації: Amd Athlon II X2 250 Processor;Розширив свої знання про структуру внутрішніх даних компютера, а також багато дізнався про методи роботи з операційною системою за допомогою мови високого рівня С .

План
ЗМІСТ

1. Вступ

Вывод
В даній курсовій роботі розроблена Програма перевірки логічного мислення.

В результаті розробки проекту я здобув навички роботи у середовищі програмування С . Розширив свої знання про структуру внутрішніх даних компютера, а також багато дізнався про методи роботи з операційною системою за допомогою мови високого рівня С . Відчув різницю між прикладним та системним програмуванням.

Список литературы
Додаток А. Схема алгоритму програми

Додаток Б. Лістинг програми

11. Тихомиров Ю.С., Громов Ю.Ю. Мова програмування С , спец. вид. / Kyiv, 2007.

2. Програмування на мові високого рівня / Т.А. Павловська. - СПБ .: Питер, 2009.

3. Давидов В. Г. Програмування та основи алгоритмізації. Учеб. посібник / Давидов В. Г. - М .: Вища школа, 2003.

ДОДАТОК А Схема алгоритму програми

ДОДАТОК Б

Лістинг програми

#include

#include

#include

#include

#include static const int INFINITY = 1000000;

static enum {START, PLAYING, QUIT, OWIN, XWIN, DRAW} state;

static enum {REGULAR, PROGRESSIVE} display_mode;

typedef struct { std::string name;

char symbol;

int move;

int game_win;

int draw_num;

bool selected;

bool win;

} player;

void display_board();

void seed_random_generator();

void get_move();

void display_result();

void select_game_type();

void get_player_symbol();

void get_player_name();

void reset_player_name();

void find_winner();

void reset_winner();

void update_board();

void update_screen();

void verify_move();

void reset_state();

void reset_board();

void initialise_player_move();

void display_intro();

void display_game_progress();

void update_game();

void setup_game_screen();

bool wrong_symbol();

bool wrong_selection();

bool game_over();

bool free_square();

void generate_moves(char _board[9], std::list &move_list);

void check_game_state(char board[9]);

int evaluate_position(char _board[9], player _player);

int MINIMAX(char _board[9], player _player);

int MINMOVE(char _board[9], player _player);

int MAXMOVE(char _board[9], player _player);

static player player1, player2, current_player; // static std::string game_type;

static std::string prev_game_type;

static char board[9] = {0};

static char CSYMBOL;

static int NMOVE;

int main() { seed_random_generator();

setup_game_screen();

display_intro();

select_game_type();

if(state != QUIT) { get_player_name();

get_player_symbol();

while(state != QUIT) { while(state == PLAYING) { initialise_player_move();

get_move();

update_game();

} if(game_over()) { find_winner();

display_result();

set_game_statistic();

reset_state();

reset_board();

display_intro();

} select_game_type();

}

} return 0;

} void select_game_type() { std::cout << " 1 - Igrat protiv computera." << std::endl;

std::cout << " 2 - Igrat protiv drugogo igroka." << std::endl;

std::cout << " 3 - Exit" << std::endl;

std::cout << "

selection: ";

int choice;

std::cin >> choice;

if(!std::cin.good()) { std::cout << "tolko integer"" << std::endl;

update_screen();

} switch(choice) { case 1: game_type = "human vs computer";

break;

case 2: game_type = "human vs human";

break;

case 3: state = QUIT;

break;

default: std::cout << "Nepravelnui vibor"." << std::endl;

update_screen();

} if(choice > 0 && choice < 3) { if(prev_game_type != "" && game_type != prev_game_type) { reset_game_statistic();

reset_player_name();

get_player_name();

get_player_symbol();

} if(game_type.length() > 0) { prev_game_type = game_type;

}

}

} void get_player_name() { std::cin.sync();

if(game_type == "human vs computer") { std::cout << "\NVVEDITE vashe imya: ";

std::getline(std::cin, player1.name);

if(player1.name.length() == 0) { get_player_name();

} player2.name = "computer";

} else if(game_type == "human vs human") { while(player1.name.length() == 0) { std::cout << "\AIGROK 1, vvedite vashe imya: ";

std::getline(std::cin, player1.name);

} while(player2.name.length() == 0) { std::cout << "Igrok 2, vvedite vashe imya: ";

std::getline(std::cin, player2.name);

}

} else if(game_type == "computer vs computer") { player1.name = "computer player1";

player2.name = "computer player2";

}

} void reset_player_name() { player1.name.erase();

player2.name.erase();

} void get_player_symbol() { if(game_type == "human vs computer") { int selection = rand() % 2;

if(selection == 0) { rand() % 2 == 0 ? player2.symbol = "X" : player2.symbol = "O";

CSYMBOL = player2.symbol;

player2.selected = 1;

std::cout << player2.name << " budet igrat"" \"" << player2.symbol << "\"" << std::endl;

} else if(selection == 1) { std::cout << player1.name << " viberite vash simvol (X, O): ";

std::cin >> player1.symbol;

player1.symbol = toupper(player1.symbol);

CSYMBOL = player1.symbol;

player1.selected = 1;

}

} else if(game_type == "human vs human") { int sel = rand() % 2;

std::string player_name = "";

if(sel == 0) { player_name = player1.name;

player1.selected = 1;

} else if(sel == 1) { player_name = player2.name;

player2.selected = 1;

} std::cout << "

" << player_name << " viberite vash simvol (X, O): ";

if(sel == 0) { std::cin >> player1.symbol;

player1.symbol = toupper(player1.symbol);

CSYMBOL = player1.symbol;

} else { std::cin >> player2.symbol;

player2.symbol = toupper(player2.symbol);

CSYMBOL = player2.symbol;

}

} else if(game_type == "computer vs computer") { std::string player_name;

int sel = rand() % 2;

if(sel == 0) { rand() % 2 == 0 ? player1.symbol = "X" : player1.symbol = "O";

player_name = player1.name;

player1.selected = 1;

CSYMBOL = player1.symbol;

} if(sel == 1) { rand() % 2 == 0 ? player2.symbol = "X" : player2.symbol = "O";

player_name = player2.name;

player2.selected = 1;

CSYMBOL = player2.symbol;

} std::cout << player_name << " budet igrat"" \"" << CSYMBOL << "\"" << std::endl;

} if(!std::cin.good() || wrong_symbol()) { std::cout << "tolko X ili O!"" << std::endl;

system("pause");

get_player_symbol();

} if(!player2.selected) { player1.symbol == "X" ? player2.symbol = "O" : player2.symbol = "X";

player1.symbol == "O" ? player2.symbol = "X" : player2.symbol = "O";

} else if(!player1.selected) { player2.symbol == "X" ? player1.symbol = "O" : player1.symbol = "X";

player2.symbol == "O" ? player1.symbol = "X" : player1.symbol = "O";

} state = PLAYING;

} void get_move() { std::cin.sync();

if(game_type == "human vs human") { if(player1.selected) { std::cout << player1.name << " vvedite vash hod (1 - 9): ";

std::cin >> player1.move;

NMOVE = player1.move;

CSYMBOL = player1.symbol;

player1.selected = 0;

player2.selected = 1;

current_player = player1;

} else if(player2.selected) { std::cout << player2.name << " vvedite vash hod (1 - 9): ";

std::cin >> player2.move;

NMOVE = player2.move;

CSYMBOL = player2.symbol;

player1.selected = 1;

player2.selected = 0;

current_player = player2;

}

} else if(game_type == "human vs computer") { if(player1.selected) { std::cout << "

" << player1.name << " vvedite vash hod (1 - 9): ";

std::cin >> player1.move;

if(!std::cin.good()) { std::cin.clear();

std::cin.sync();

}

NMOVE = player1.move;

CSYMBOL = player1.symbol;

current_player = player1;

player1.selected = 0;

player2.selected = 1;

Sleep(1000);

} else if(player2.selected) { player2.move = MINIMAX(board, player2);

NMOVE = player2.move;

CSYMBOL = player2.symbol;

current_player = player2;

player1.selected = 1;

player2.selected = 0;

reset_state();

Sleep(1500);

}

} else if(game_type == "computer vs computer") { if(player1.selected) { player1.move = MINIMAX(board, player1);

NMOVE = player1.move;

CSYMBOL = player1.symbol;

current_player = player1;

player1.selected = 0;

player2.selected = 1;

reset_state();

Sleep(2500);

} else if(player2.selected) { player2.move = MINIMAX(board, player2);

NMOVE = player2.move;

CSYMBOL = player2.symbol;

current_player = player2;

player1.selected = 1;

player2.selected = 0;

reset_state();

Sleep(2500);

}

} verify_move();

if(game_over()) { return;

}

} void set_game_statistic() { if(state == START) { player1.game_win = 0;

player1.draw_num = 0;

player1.win = 0;

player2.game_win = 0;

player2.draw_num = 0;

player2.win = 0;

} else if(state == XWIN || state == OWIN) { if(player1.win) { player1.game_win ;

player1.win = 0;

} else if(player2.win) { player2.game_win ;

player2.win = 0;

}

} else if(state == DRAW) { player1.draw_num ;

player2.draw_num ;

}

} void reset_game_statistic() { player1.game_win = 0;

player1.draw_num = 0;

player1.win = 0;

player2.game_win = 0;

player2.draw_num = 0;

player2.win = 0;

player1.selected = 0;

player2.selected = 0;

} void display_game_statistic() { if(state != START) { std::cout << "

game statistic" << std::endl;

std::cout << "==============" << std::endl;

std::cout << player1.name << " has won " << player1.game_win << " game(s)." << std::endl;

std::cout << player2.name << " has won " << player2.game_win << " game(s)." << std::endl;

std::cout << player1.draw_num << " game(s) ended with a draw." << std::endl;

}

} void find_winner() { if(state == XWIN && player1.symbol == "X") { player1.win = 1;

} else if(state == OWIN && player1.symbol == "O") { player1.win = 1;

} else if(state == XWIN && player2.symbol == "X") { player2.win = 1;

} else if(state == OWIN && player2.symbol == "O") { player2.win = 1;

}

} void reset_winner() { player1.win = 0;

player2.win = 0;

} bool wrong_symbol() { return (CSYMBOL != "X" && CSYMBOL != "O");

} bool wrong_selection() { return !(NMOVE > 0 && NMOVE < 10);

} void initialise_player_move() { player1.move = -1;

player2.move = -1;

} bool game_over() { return (state == XWIN || state == OWIN || state == DRAW);

} void reset_state() { state = PLAYING;

} void reset_board() { for(int i = 0; i < 9; i) { board[i] = 0;

}

} void update_board() { if(state == PLAYING) { if(player1.move != -1 && player2.move == -1) { board[player1.move - 1] = player1.symbol;

} else if(player2.move != -1) { board[player2.move - 1] = player2.symbol;

}

}

} void display_result() { if(player1.win) { std::cout << player1.name << " pobedil!" << std::endl;

} else if(player2.win) { std::cout << player2.name << " pobedil!" << std::endl;

} else if(player1.win == 0 && player2.win == 0) { std::cout << "nichya!" << std::endl;

} system("pause");

system("cls");

} void update_game() { update_board();

display_game_progress();

check_game_state(board);

} bool free_square() { if(player1.move != -1 && player2.move == -1) { return board[player1.move - 1] == 0;

} else if(player2.move != -1) { return board[player2.move - 1] == 0;

} return 0;

} void display_board() { std::cout << std::endl;

std::cout << " " << board[0] << " | " << board[1] << " | " << board[2] << std::endl;

std::cout << "-----------" << std::endl;

std::cout << " " << board[3] << " | " << board[4] << " | " << board[5] << std::endl;

std::cout << "-----------" << std::endl;

std::cout << " " << board[6] << " | " << board[7] << " | " << board[8] << std::endl;

std::cout << std::endl;

std::cin.sync();

} void display_game_progress() { if(display_mode == PROGRESSIVE) { system("cls");

display_intro();

} std::cout << "

pole posle hoda " << current_player.name << std::endl;

display_board();

} void verify_move() { if(wrong_selection() || !free_square()) { std::cout << "nepravelnui hod." << std::endl;

if(player2.move == -1) { player1.selected = 1;

player2.selected = 0;

} else { player1.selected = 0;

player2.selected = 1;

} system("pause");

if(game_type == "human vs computer") { player1.selected = 1;

player2.selected = 0;

} get_move();

}

} void seed_random_generator() { srand((unsigned) time(NULL));

} void display_intro() { std::cout << "

/////////////////////////////////////////" << std::endl;

std::cout << " Krestiki-Noliki " << std::endl;

std::cout << "/////////////////////////////////////////" << std::endl;

} void setup_game_screen() { system("mode con: cols=99 lines=300");

} void update_screen() { system("pause");

system("cls");

std::cin.clear();

std::cin.sync();

display_intro();

select_game_type();

} void check_game_state(char board[9]) { if ((board[0] == CSYMBOL && board[1] == CSYMBOL && board[2] == CSYMBOL) ||

(board[3] == CSYMBOL && board[4] == CSYMBOL && board[5] == CSYMBOL) ||

(board[6] == CSYMBOL && board[7] == CSYMBOL && board[8] == CSYMBOL) ||

(board[0] == CSYMBOL && board[3] == CSYMBOL && board[6] == CSYMBOL) ||

(board[1] == CSYMBOL && board[4] == CSYMBOL && board[7] == CSYMBOL) ||

(board[2] == CSYMBOL && board[5] == CSYMBOL && board[8] == CSYMBOL) ||

(board[0] == CSYMBOL && board[4] == CSYMBOL && board[8] == CSYMBOL) ||

(board[2] == CSYMBOL && board[4] == CSYMBOL && board[6] == CSYMBOL))

{ if(CSYMBOL == "X") { state = XWIN;

} else if(CSYMBOL == "O") { state = OWIN;

}

} else { state = DRAW;

for(int i = 0; i < 9; i) { if(board[i] == 0) { state = PLAYING;

break;

}

}

}

} void generate_moves(char _board[9], std::list &move_list) { for(int i = 0; i < 9; i) { if(_board[i] == 0) { move_list.push_back(i);

}

}

} int evaluate_position(char _board[9], player _player) { check_game_state(_board);

if(game_over()) { if((state == XWIN && _player.symbol == "X") ||

(state == OWIN && _player.symbol == "O")) { return INFINITY;

} else if((state == XWIN && _player.symbol == "O") ||

(state == OWIN && _player.symbol == "X")) { return -INFINITY;

} else if(state == DRAW) { return 0;

}

} return -1;

} int MINIMAX(char _board[9], player _player) { int best_val = -INFINITY, index = 0;

std::list move_list;

char best_moves[9] = {0};

generate_moves(_board, move_list);

while(!move_list.empty()) {

_board[move_list.front()] = _player.symbol;

CSYMBOL = _player.symbol;

int val = MINMOVE(_board, _player);

if(val > best_val) { best_val = val;

index = 0;

best_moves[index] = move_list.front() 1;

} else if(val == best_val) { best_moves[ index] = move_list.front() 1;

}

_board[move_list.front()] = 0;

move_list.pop_front();

} if(index > 0) { index = rand() % index;

} return best_moves[index];

} int MINMOVE(char _board[9], player _player) { int pos_value = evaluate_position(_board, _player);

if(pos_value != -1) { return pos_value;

} int best_val = INFINITY;

std::list move_list;

generate_moves(_board, move_list);

while(!move_list.empty()) {

_player.symbol == "X" ? CSYMBOL = "O" : CSYMBOL = "X";

_board[move_list.front()] = CSYMBOL;

int val = MAXMOVE(_board, _player);

if(val < best_val) { best_val = val;

}

_board[move_list.front()] = 0;

move_list.pop_front();

} return best_val;

} int MAXMOVE(char _board[9], player _player) { int pos_value = evaluate_position(_board, _player);

if(pos_value != -1) { return pos_value;

} int best_val = -INFINITY;

std::list move_list;

generate_moves(_board, move_list);

while(!move_list.empty()) {

_player.symbol == "X" ? CSYMBOL = "X" : CSYMBOL = "O";

_board[move_list.front()] = CSYMBOL;

int val = MINMOVE(_board, _player);

if(val > best_val) { best_val = val;

}

_board[move_list.front()] = 0;

move_list.pop_front();

} return best_val;

}

Размещено на

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?