Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Игра "Акинатор". Язык программирования: С++. Среда разработки: Microsoft Visual Studio 2010

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Разработка игры "Угадай персонажа", ее суть и содержание. Запоминание новых персонажей и вопросов, коррекция базы данных. Использование языка программирования С++ и среды разработки Microsoft Visual Studio 2010. Алгоритмы и методы, структура программы.
Краткое сожержание материала:

Размещено на

Московский государственный университет экономики, статистики и информатики

Институт Компьютерных Технологий

Кафедра Математического обеспечения информационных систем и инноватики (МОИСиИ)

Курсовая работа

по курсу "Объектно-ориентированное программирование (ООП (2))"

на тему

"Игра “Акинатор. Язык программирования: С++. Среда разработки: Microsoft Visual Studio 2010

Выполнил студент группы ДКО-201:

Наразин И.В.

ДКО-10161

Руководитель Переверзев И.Ю.

Москва, 2012 г.

Содержание

  • Задание
  • Структура программы
  • Исходный код
  • Литература

Задание

Разработка игры “Угадай персонажа”. Суть игры: пользователь загадывает персонажа, затем отвечает на предлагаемые программой вопросы. В итоге программа угадывает загаданного персонажа.

В программе учесть:

1) Допустить некоторый процент ошибочных ответов. Т.е. если пользователь может ошибиться в своем ответе, но программа все равно должна дать верный ответ.

2) Обучаемость. Программа должна запоминать новых персонажей и новые вопросы, корректировать свою базу данных.

3) Каждый вопрос должен дать программе как можно больше информации. Т.е. вопрос не должны выбираться случайно.

1. Алгоритмы и методы

База данных программы состоит из двух файлов:

Responses. txt - все возможные ответы программы

Questions. txt - все возможные вопросы.

Вид записи в responses. Txt

Каждый раз список возможных вариантов ответов сортируется по вероятностям. Новый вопрос берется из списка вопросов самого, на данный момент, вероятного ответа. Первые несколько вопросов - самые наиболее встречающиеся в векторах ответов персонажей. Они нужны для первоначального отсева персонажей.

При положительном ответе на вопрос, вероятность всех ответов, содержащий данный вопрос увеличивается. А вероятность ответов, не содержащих данный вопрос уменьшается. При отрицательном ответе наоборот: вероятность ответов, не содержащих данный вопрос повышается, а содержащих - уменьшается. Все положительные вопросы запоминаются в рамках одной игры, на случай добавления нового персонажа. Неточные ответы: скорее да и скорее нет влияют на то, на сколько вероятность увеличится или уменьшится. При ответе не знаю, данный вопрос просто удаляется.

Ответ считается найденным, если разность между двумя, на данный момент самыми вероятными ответами, будет больше заранее заданной константы. Если пользователь загадал персонажа, которого нет в базе, то программа выдаст текущего наиболее вероятного (подходящего для данной базы) персонажа. А пользователь может скорректировать ответ программы.

Для добавления нового персонажа, пользователю предлагается ввести имя. Если его нет в базе (если есть, программа выдала неверный результат из-за небольшой базы), то он добавляется в базу ответов, а вектор его вопросов будет равен вектору положительных ответов в рамках данной игры.

Дальше пользователю предлагается ввести вопросов, который позволит отличить персонажа пользователя от персонажа, выданного программой. Этот вопрос запоминается в базе и заносится в вектор ответов для нового персонажа. Сам персонаж так же заносится в базу.

игра программа алгоритм

Структура программы

Основной алгоритм заключен в класс toguess. Методы:

toguess () - конструктор. Считывание базы из файлов.

void save () - сохранение измененной базы

void newgame () - новая игра, сброс вектора положительных ответов, загрузка скорректированной базы

int getQuestion () - выдает новый вопрос

void setQuestion (int id, bool q); - корректирует вероятности ответов в соответствии с ответом пользователя на вопрос с id.

int getResponse (int id=0); - попытка получить ответ

char* getfResponse (int id); - возвращает ответ с данным id в векторе

void setResponse (int id, bool flag); - корректирует базу, если программа угадала правильно. Не нужен, пока база мала. Имеет смысл, когда база больше нескольких тысяч вариантов

void newResponse (char* response); - добавляет в базу нового персонажа

void newQuestion (char* q); - добавляет в базу новый вопрос

void dellQuestion (int id); - удаляет вопрос из векторов ответов персонажей.

Приватные методы:

bool findInVector (std:: vector <int> v, int id); - ищет id в векторе. Если находит, возвращает true

bool findInVector (std:: vector <s_question> v, int id); - ищет id в векторе. Если находит, возвращает true

int maxid (std:: vector <s_question> _questions); - возвращает максимальный id в векторе

char* addspaces (char* str); - заменяет нижниче пдчеркивания на пробелы

char* toniceview (char* str); - переводит из транслита в кириллицу

bool havequestions (); - true, если есть вопросы, на которые пользователь не ответил

int populatQuestion (); - возваращет id самого популярного вопроса в векторах ответов персонажей

Исходный код

Класс toguess

Toguess. h

#include <vector>

class toguess

{

private:

struct s_question // структура вопросов

{

char* question;

int id;

};

struct s_response // структура ответов

{

char* response;

std:: vector <int> idQuest;

double probability;

};

// Постоянаая база для всей игры

std:: vector <s_question> questions;

std:: vector <s_response> responses;

// Временная база для одной игры

std:: vector <int> donequest;

std:: vector <s_question> Tquestions;

std:: vector <s_response> Tresponses;

int step;

bool findInVector (std:: vector <int> v, int id);

bool findInVector (std:: vector <s_question> v, int id);

int maxid (std:: vector <s_question> _questions);

char* addspaces (char* str);

char* toniceview (char* str);

bool havequestions ();

int populatQuestion ();

public:

toguess ();

void save ();

void newgame ();

int getQuestion ();

void setQuestion (int id, int q);

int getResponse (int id=0);

char* getfResponse (int id);

void setResponse (int id, bool flag);

void newResponse (char* response);

void newQuestion (char* q);

void dellQuestion (int id);

};

Toguess. cpp

#include "StdAfx. h"

#include <vector>

#include "toguess. h"

#include <iostream>

#include <algorithm>

#include <fstream>

using namespace std;

toguess:: toguess ()

{ // конструктор

char* db_q_filename = "questions. txt";

char* db_r_filename = "responses. txt";

// Загружаем базу данных

// База вопросов

FILE *file = fopen (db_q_filename,"r");

if (! file)

{

return;

}

while (! feof (file)) {

char word [1025];

int id;

fscanf (file,"/%s /%i ",&word,&id);

char *question = new char [strlen (word)];

strcpy (question,word);

// toniceview (question);

s_question _Q;

_Q. id = id;

_Q. question = question;

questions. push_back (_Q);

}

fclose (file);

// База ответов (персонажей)

file = fopen (db_r_filename,"r");

if (! file)

...
Другие файлы:

C# Программирование на языке высокого уровня. Среда разработки Microsoft Visual Studio.NET
Объектно-ориентированная технология создания программ. Среда разработки Visual Studio.NET. Особенности среды Microsoft Visual Studio 2010. Приложения...

Microsoft Visual Studio 2010: A Beginner's Guide
Essential Visual Studio 2010 Skills -- Made Easy!Endorsed by Microsoft and written by a Microsoft MVP and Visual Studio expert, this hands-on guide te...

Игра "Линии"
Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы...

Moving to Microsoft Visual Studio 2010
The book is not a language primer, a language reference, or a single technology book. It’s a book that will help professional developers move from pre...

Visual Studio 2010 All-in-One For Dummies
A comprehensive, easy-to-understand guide to Visual Studio 2010Visual Studio is Microsoft's comprehensive development environment that encompasses th...