Технология программирования: игра 'Бой словами'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    558,42 Кб
  • Опубликовано:
    2016-01-24
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Технология программирования: игра 'Бой словами'














Пояснительная записка к курсовой работе

по дисциплине «Технология программирования»

Технология программирования: игра «Бой словами»

Реферат

Графика, искусственный интеллект, программирование, словарь, Microsoft Visual Studio, Магия Слов.

Объектом исследования является игра «Магия Слов».

Цель курсовой работы - разбор логики и ее воспроизведение в собственной программе.

Исследование логики программы проводилось на игре от Alawar Entertainment «Магия слов», путем исследования этого приложения. Исполнение собственной игры проводилось с использованием пакета для кроссплатформенной разработки - Cocos2dx.

Результатом программы является готовая программа, являющаяся аналогией игры «Магия Слов».

В процессе разработки программы были изучены основные средства программирования на языке си, базовые возможности пакета Cocos2dx в общем и языка C++ в частности для создания пользовательского графического интерфейса.

Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2007.

Задание на курсовую работу

В ходе выполнения курсовой работы нужно реализовать игру. Все игры являются пошаговыми, с интерфейсом командной строки. Компьютер выводит в текстовом виде информацию о состоянии игры и ходе компьютера. Пользователь делает свой ход, вводя с клавиатуры нужные данные.

Для получения оценки «удовлетворительно» достаточно реализовать только интерфейс, который бы позволял 2 игрокам играть между собой. При этом программа должна проверять правильность ходов.

Для получения оценки «хорошо» необходимо реализовать любую стратегию игры за компьютер (кроме стратегии выбора хода случайным образом).

Для получения оценки «отлично» реализованная в программе стратегия должна быть близка к оптимальной.

Содержание

Введение

. Постановка задачи

. Подготовка

. Создание игрового поля

. Действия над буквами

. Действия игрока

. Действия компьютера

Заключение

Библиографический список


Введение

Курсовая работа подразумевает собой создание игры. Суть игры заключается в том, чтобы снизить показатель здоровья противника до нуля, путем сложения слов из букв. В игре имеется 4 поля: сверху располагается поле, в которое нужно ввести слово, количество букв которого будет равнозначно количеству нанесенного урона; снизу располагаются поля с буквами - центральное и боковые. Центральное поле, имеющее 16 букв, доступно для всех игроков. Боковые поля, имеющие 4 буквы, доступны одноименным игрокам, то есть, первый игрок может использовать центральное и левое поле, а второй - центральное и правое. Таким образом, в арсенале каждого игрока имеется 20 букв. В начале игры каждый игрок имеет 100 здоровья. Если игрок не может ввести слово, то он имеет возможность сбросить буквы в центральном поле, но он потеряет 5 здоровья.

1. Постановка задачи


Разобраться в правилах игры, придумать контрольные примеры, структуры данных для игры.

Правила игры «Магия Слов»:

Цель игры - снизить показатель здоровья противника до нуля, путем сложения слов из букв. Правила игры «Магия Слов» очень просты:

Игрок выбирает локацию.

Игроку дается поле, состоящее из 16 букв.

Игрок должен в свой ход составить слово, количество букв которого равнозначно нанесенному урону. То есть, чем больше слово, тем больше урона будет нанесено противнику.

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

Победив противника, игрок переходит к следующему противнику пока не дойдет до босса локации.

Если игрок погибает во время прохождения локации, то он должен начинать сначала.

В своей программе мне пришлось убрать большую часть элементов игры ввиду ограниченности времени и кое-что изменить. Таким образом, правила игры «Бой словами» таковы:

Начинается игра

Игрокам дается поле, состоящее из 16 букв и доступное обоим игрокам, и 2 мини-поля, состоящее из 4 букв и доступное одноименному игроку.

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

Победителем становится тот, кто снизил показатель здоровья противника до нуля.

Таким образом, игра «Бой словами» предназначена для одного или двух игроков, когда игра «Магия Слов» предназначена только на одного.

2. Подготовка


Для начала подключим библиотеки, нужные для работы.

//Подключение библиотек

#include "HelloWorldScene.h"

#include <iostream>

#include <fstream>

#include <string>

#include <list>

#include <cstdlib>

#include <ctime>namespace std;namespace cocos2d;

Теперь объявим глобальные переменные и массивы, нужные для работы. Массивы типа CCPoint хранят в себе координаты, в которых будут находиться буквы. Массивы типа int хранят в себе индексы букв. Массивы points и wordl относятся к верхнему полю, в которое нужно будет ввести слово. Массивы field и lettersl относятся к нижнему центральному полю, в котором будут находиться буквы, из которых нужно будет составлять слова. Массивы field1 и letters1l относятся к нижнему боковому полю первого игрока, в котором также будут находиться буквы для составления слов, а field 2 и letters2l относятся для второго игрока.

// Массивы координат points [8];field [16];field1 [4];field2 [4];

// Массивы индексовwordl[8];lettersl[16];letters1l[4];letters2l[4];

// Количество жизней у игроковhealth1;health2;

// Текущий игрокcurrent_player;AI_enabled;

3. Создание игрового поля


Для начала сделаем меню для игры.

// Создать главное меню= CCSprite::create("menu.png");>setPosition(ccp(size.width/2, size.height/2));>addChild(sSprite, 10);

// Кнопка игры с живым соперником*Player = CCMenuItemImage::create(

"pl_btn.png",

"pl_btn.png",,_selector(HelloWorld::playPlayer));>setPosition(ccp(200, size.height/2));

// Кнопка игры с AI*AI = CCMenuItemImage::create(

"ai_btn.png",

"ai_btn.png",,_selector(HelloWorld::playAI));>setPosition(ccp(size.width-200, size.height/2));

// Главное меню= CCMenu::create(Player, AI, NULL);>setPosition(CCPointZero);>addChild(sMenu, 10);

Основой игры является игровое поле, состоящее из 4 полей. Первое поле располагается сверху. В него нужно ввести слово, количество букв которого будет равнозначно количеству нанесенного урона. Снизу располагаются поля с буквами - центральное и боковые. Центральное поле, имеющее 16 букв, доступно для всех игроков. Боковые поля, имеющие 4 буквы, доступны одноименным игрокам, то есть, первый игрок может использовать центральное и левое поле, а второй - центральное и правое.

Для начала получим размеры окна, для нашей программы.

// Получить размеры окнаsize = CCDirector::sharedDirector()->getWinSize();

Теперь активируем обработку нажатий.

>setTouchEnabled(true);

Теперь, непосредственно, создаем меню с кнопками. Кнопки будут описаны ниже.

// Меню* pMenu = CCMenu::create(Attack, Shuffle, NULL);>setPosition(CCPointZero);_BREAK_IF(! pMenu);>addChild(pMenu, 1);

dx работает со спрайтами, поэтому игровым полем является картинка, нарисованная с помощью графического редактора GIMP.

Рисунок 1 - Игровое поле

Теперь мы создаем фоновое изображение.

// Фоновое изображение* pSprite = CCSprite::create("background_img.png");>setPosition(ccp(size.width/2, size.height/2));>addChild(pSprite, 0);

программа игровой слово

Следующим шагом будет заполнение массива координат слова и массива индексов слова.

// Заполнение массива координат слова и массива индексов слова(i=0; i<8; i++)

{[i] = CCPoint(137+i*75, 462);[i]=-1;

}

После этого мы заполняем массив координат центрального поля и массива индексов поля и создаем буквы центрального поля.

(i=0; i<16; i++)

{[i] = CCPoint(287+(i%4)*75, 287-(i/4)*75);((char)('A'+rand()%26), field[i]);[i]=i;

}

А теперь мы заполним массивы координат поля первого и второго игрока и массива индексов поля первого и второго игрока и создаем буквы поля первого и второго игрока.

// Заполнение массива координат поля перового игрока и массива индексов поля первого игрока, создание букв поля первого игрока

(i=0; i<4; i++)

{[i] = CCPoint(63, 287-(i)*75);((char)('A'+rand()%26), field1[i]);l[i]=i+16;

}

// Заполнение массива координат поля второго игрока и массива индексов поля второго игрока, создание букв поля второго игрока(i=0; i<4; i++)

{[i] = CCPoint(737, 287-(i)*75);((char)('A'+rand()%26), field2[i]);l[i]=i+20;

}

Теперь мы сделаем кнопки атаки и перемешивания, которые так же были нарисованы с помощью графического редактора GIMP.

// Кнопка атаки*Attack = CCMenuItemImage::create(

"attack_btn.png",

"attack_btn.png",,_selector(HelloWorld::attackCallback));>setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2, 375));

// Кнопка перемешивания*Shuffle = CCMenuItemImage::create(

"shuffle_btn.png",

"shuffle_btn.png",,_selector(HelloWorld::shuffleCallback));>setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2, 545));

Рисунок 2 - Кнопка атаки

Рисунок 3 - Кнопка перемешивания

4. Действия над буквами


Данный этап описывает все действия над буквами. Начнем с добавления буквы в игру. Для того, чтобы буква не терялась на белом фоне, был создан спрайт для ячейки в графическом редакторе GIMP, в которую будет помещена буква. Это всё делает функция addLetter.

HelloWorld::addLetter(char letter,CCPoint position)

{

// Создание изображения для буквы* image = CCSprite::create("letter.png");>setPosition(position);>addChild(image, 0);

// Создание надписи для буквыchar* str = &letter;* label = CCLabelTTF::create(str, "Calibri", 64,(image->getContentSize().width,image->getContentSize().height), kCCTextAlignmentCenter);>setPosition(ccp(image->getContentSize().width/2,image->getContentSize().height/2));>addChild(label, 0);

// Добавление буквы в массив

_letters->addObject(image);

}

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

HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event)

{

// Получить координаты нажатия* touch = (CCTouch*)(touches->anyObject());location = touch->locationInView();= CCDirector::sharedDirector()->convertToGL(location);

// Для каждой буквы, присутствующей в игре(int i=0; i<_letters->count(); i++)

{

// Получить координаты крайних точек*letter = dynamic_cast<CCSprite*>(_letters->objectAtIndex(i));xmax, xmin, ymax, ymin;= letter->getPositionX() + letter->getContentSize().width/2;= letter->getPositionX() - letter->getContentSize().width/2;= letter->getPositionY() + letter->getContentSize().height/2;= letter->getPositionY() - letter->getContentSize().height/2;

// Если нажатие совершено внутри буквы(location.x>xmin && location.x<xmax && location.y>ymin && location.y<ymax)

{

// Если нажатие совершено в области выстраиваемого слова(location.y>400)

{

// Найти, на какую по счету букву в слове нажали, вернуть ее и все следующие за ней на место.(int j=0; j<8; j++)

{(wordl[j] == i)

{(j);

}

}

}

// Если нажатие в области полей букв

{

// Проверить, можно ли использовать букву (не принадлежит ли она игроку, который сейчас не ходит)valid = true;(current_player == 1)

{(int k = 0; k < 4; k++)

{(letters2l[k] == i)

{= false;

}

}

}

{(letters1l[k] == i)

{= false;

}

}

}

// Если букву можно использовать, и в текущем слове меньше 8 букв (word_index<8 && valid)

{

// Проверка, не движется ли эта буква на свое место в словеexists = false;(int j = 0; j < 8; j++)

{(wordl[j]==i)= true;

}

// Если все в порядке, переместить букву на ее место в слове, записать ее индекс в массив индексов слова, увеличить индекс конца текущего слова(!exists)

{(i, points[word_index]);[word_index]=i;_index++;

}

Следующая функция, returnLetter, предназначена для возврата буквы из верхнего поля на её место.

HelloWorld::returnLetter(int index)

{i;

// Вернуть букву на ее исходное положение

// Поиск по бувам из основного поля(i=0; i<16; i++)

{(lettersl[i]==index)

{(index, field[i]);

}

}

// Поиск по бувам из поля первого игрока(i=0; i<4; i++)

{(letters1l[i]==index)

{(index, field1[i]);

}

}

// Поиск по бувам из поля второго игрока(i=0; i<4; i++)

{(letters2l[i]==index)

{(index, field2[i]);

}

}

}

Функция returnLetter вызывается в функции returnLetters, которая, в свою очередь, возвращает буквы на исходную позицию, начиная с переданного индекса.

HelloWorld::returnLetters(int index)

{i;(i=index; i<8; i++)

{(wordl[i]);[i]=-1;

}_index=index;

}

Теперь рассмотрим функцию removeLetter. Данная функция функция прячет букву в верхнем поле, ставит её на исходную позицию. Чтобы не появлялась одна и та же буква, функция removeLetter вызывает функцию resetLetter.

HelloWorld::removeLetter(int word_index)

{

// Задать последовательность действий для изображения буквы: сделать прозрачной, вызвать функцию замены буквы, задержка, сделать непрозрачной

((CCSprite*)_letters->objectAtIndex(word_index))->runAction(CCSequence::create(::create(0.5, 0), ::create(this, callfuncND_selector(HelloWorld::resetLetter), (void*)word_index),::create(0.25),::create(0.5, 255), ));

// Аналогичная последовательность действий для надписи буквы

((CCSprite*)((CCSprite*)_letters->objectAtIndex(word_index))->getChildren()->objectAtIndex(0))->runAction(CCSequence::create(::create(0.5, 0), ::create(0.25),::create(0.5, 255), ));

// Указать, что исходная позиция буквы теперь свободна(int i=0; i<16; i++)

{(lettersl[i]==word_index)

{[i]=-1;

}

}(int i=0; i<4; i++)

{(letters1l[i]==word_index)

{l[i]=-1;

}

}(int i=0; i<4; i++)

{(letters2l[i]==word_index)

{l[i]=-1;

}

}

}HelloWorld::resetLetter(CCNode* sender, void* word_index)

{w=((int) word_index);

// Поиск пустого места в поле, генерация новой надписи для буквы и перемещение буквы на свободную позицию

// В основном поле(int i=0; i<16; i++)

{(lettersl[i]==-1)

{letter = (char)('A'+rand()%26);

s1[] = " ";[0] = letter;* str = s1;

((CCSprite*)_letters->objectAtIndex(w))->setPosition(field[i]);

((CCLabelTTF*)((CCSprite*)_letters->objectAtIndex(w))->getChildren()->objectAtIndex(0))->setString(str);[i] = w;;

}

}

{(letters1l[i]==-1)

{letter = (char)('A'+rand()%26);s1[] = " ";[0] = letter;* str = s1;

((CCSprite*)_letters->objectAtIndex(w))->setPosition(field1[i]);

((CCLabelTTF*)((CCSprite*)_letters->objectAtIndex(w))->getChildren()->objectAtIndex(0))->setString(str);l[i] = w;;

}

}

// В поле второго игрока(int i=0; i<4; i++)

{(letters2l[i]==-1)

{letter = (char)('A'+rand()%26);s1[] = " ";[0] = letter;* str = s1;

((CCSprite*)_letters->objectAtIndex(w))->setPosition(field2[i]);

((CCLabelTTF*)((CCSprite*)_letters->objectAtIndex(w))->getChildren()->objectAtIndex(0))->setString(str);l[i] = w;;

}

}

}

5. Действия игрока


Игроку доступны две кнопки - «Attack» и «Shuffle». Нажатие кнопки «Attack» вызывает функцию attackCallback. Эта функция формирует строку из выбранных букв и проверяет наличие этой строки в словаре при помощи функции findword.

HelloWorld::attackCallback(CCObject* pSender)

{i;a[9];

// Из букв, выстроенных в ряд, получить слово(i=0; i<word_index; i++)

{char* t = ((CCLabelTTF*)((CCSprite*)_letters->objectAtIndex(wordl[i]))->getChildren()->objectAtIndex(0))->getString();[i] = *t;

}

// Добавить символ окончания строки в конец полученного слова= 0;(a[i] >= 'A' && a[i] <= 'Z')

{++;

}[i] = '\0';

// Если полученное слово есть в словаре, ход переходит к дургому, игрок наносит урон, использованные буквы заменяются новыми(findword(a))

{();(current_player, i);(int i=0; i<8; i++)

{(wordl[i]>=0)

{(wordl[i]);[i]=-1;_index--;

}

Если игрок не может создать слово из предоставленных ему букв, то на этот случай есть кнопка «Shuffle». Эта функция заменяет все буквы в центральном поле на новые буквы, но наносит урон игроку, использовавшему эту кнопку. Происходит это посредством функции returnLetters и removeLetter. Функция returnLetters нужна для того чтобы все буквы вернулись на исходные места, а функция removeLetter для того чтобы заменит все буквы в центральном поле.

HelloWorld::shuffleCallback(CCObject* pSender)

{i;

// Вернуть все выстроенные буквы на места(0);

// Заменить все буквы в основном поле(i=0; i<16; i++)

{(lettersl[i]);

}

// Нанести урон игроку, который перемешивал буквы(current_player, 3);

}

Функция damagePlayer наносит урон. Функция получает номер игрока и количество урона, которое будет нанесено игроку. После этих манипуляций обновляется показатель здоровья игрока.HelloWorld::damagePlayer(int player, int damage)

{hlt[4];(player == 1)

{-=damage;(hlt,"%i",health1);->setString(hlt);

}(player == 2)

{-=damage;(hlt,"%i",health2);->setString(hlt);

}

}

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

Рисунок 4 - Игрок составляет слово

После этого игрок нажимает кнопку «Attack», буквы исчезают из верхнего поля, а в центральном и боковом поле появляются новые буквы. Боковое поле игрока скрывается. Ход игрока заканчивается.

Рисунок 5 - Игрок нажимает кнопку атаки

6. Действия компьютера


На данном этапе будут рассматриваться действия искусственного интеллекта. Функция findword построчно считывает содержание файла словаря, пробегается по всем доступным буквам, составляет слова и выбирает самое длинное из них.HelloWorld::findword(string word)

{i;found=false;

// Открытие файлаSTRING;infile;.open ("dict.txt");(!infile.eof()) // To get you all the lines.

{

// Чтение строки из файла(infile,STRING); // Saves the line in STRING.= 0;

// Если считанная строка и слово, которое мы ищем, одинаковой длины(STRING.size() == word.size())

{

// Сравниваем строки посимвольно(i < word.size())

{(STRING[i] == word[i])

{++;

}

{= word.size()+1;

}

}(i == word.size())

{= true;

}

}

}

// Закрытие файла.close();

// Возвращаем true, если слово найдено и false, если не найдено.found;


Функция getAvailableLetters получает список доступных букв для искусственного интеллекта.

HelloWorld::getAvailableLetters()

{i;(i = 0; i < 16; i++)

{char* t = ((CCLabelTTF*)((CCSprite*)_letters->objectAtIndex(lettersl[i]))->getChildren()->objectAtIndex(0))->getString();[i] = *t;

}(i = 0; i < 4; i++)

{char* t = ((CCLabelTTF*)((CCSprite*)_letters->objectAtIndex(letters2l[i]))->getChildren()->objectAtIndex(0))->getString();[i+16] = *t;

}[20] = '\0';

}

Функция letterAvailable проверяет, есть ли такая буква среди предложенных букв.

HelloWorld::letterAvailable(char letter, int count)

{i;found = 0;(i = 0; i < 20; i++)

{(letter == available[i])

{++;

}

}(found>=count)

{true;

}

{false;

}

}

Функция letterCount проверяет количество повторов буквы в слове.

HelloWorld::letterCount(string word, int index)

{count = 1;i;(i = index+1; i < word.size(); i++)

{(word[i] == word[index])

{++;

}

}count;

}

Функция checkAvailableWord берет слово и проверяет можно ли его составить из предложенных букв.

{i = 0;j = 0;count = 0;possible = true;

(word.size() > 8 || word.size() <= optimal_length)

{= false;

}(i < word.size() && possible)

{= letterAvailable(word[i], letterCount(word, i));++;

}(possible)

{= word;_length = word.size();

}possible;

}

Функция AI_turn открывает файл словаря, получает список доступных букв для искусственного интеллекта, считывает строки из файла, составляет из предложенных букв слово. Если функция не может составить слово, то она вызывает функцию, shuffleAI, при помощи которой искусственный интеллект нажимает на кнопку «Shuffle».

HelloWorld::AI_turn(CCNode* sender)

{STRING;infile;.open ("dict.txt");();_length = 0;(!infile.eof()) // To get you all the lines.

{

// Чтение строки из файла(infile,STRING); // Saves the line in STRING.(STRING);

}(optimal_length == 0)

{("Shuffling");>runAction(CCSequence::create(::create(this, callfuncN_selector(HelloWorld::shuffleAI)), ::create(1.5),::create(this, callfuncN_selector(HelloWorld::AI_turn)), NULL));

}

{(optimal);>runAction(CCSequence::create(::create(1.5),::create(this, callfuncN_selector(HelloWorld::attackAI)), NULL));

}

}

Функция createWord создает слово.HelloWorld::createWord(string word)

{i, j, k;found;used;letters[16];(i = 0; i < word.size(); i++)

{= false;

//Для основного поля(j = 0; j < 16; j++)

{char* t = ((CCLabelTTF*)((CCSprite*)_letters->objectAtIndex(lettersl[j]))->getChildren()->objectAtIndex(0))->getString();[j] = *t;(letters[j] == word[i] &&!found)

{

//Смотрим, задействована ли буква в слове= false;(k = 0; k < 8; k++)

{(wordl[k] == lettersl[j])

{= true;

}

}

//Если не задействована(!used)

{(lettersl[j], points[word_index]);[word_index]=lettersl[j];_index++;= true;

}

}

}(j = 0; j < 4; j++)

{char* t = ((CCLabelTTF*)((CCSprite*)_letters->objectAtIndex(letters2l[j]))->getChildren()->objectAtIndex(0))->getString();[j] = *t;(letters[j] == word[i] &&!found)

{= false;(k = 0; k < 8; k++)

{(wordl[k] == letters2l[j])

{= true;

}

{(letters2l[j], points[word_index]);[word_index]=letters2l[j];_index++;= true;

}

Функции shuffleAI и attackAI аналогичны функциям shuffleCallback и attackCallback, только предназначены для искусственного интеллекта.

HelloWorld::shuffleAI(CCNode* sender)

{i;

// Вернуть все выстроенные буквы на места(0);

// Заменить все буквы в основном поле(i=0; i<16; i++)

{(lettersl[i]);

}

// Нанести урон игроку, который перемешивал буквы(current_player, 3);

}HelloWorld::attackAI(CCNode* sender)

{();(current_player, optimal_length);(int i=0; i<8; i++)

{(wordl[i]>=0)

{(wordl[i]);[i]=-1;_index--;

}

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

Рисунок 6 - Компьютер составляет слово

После этого компьютер нажимает кнопку «Attack», буквы исчезают из верхнего поля, а в центральном и боковом появляются новые буквы. Боковое поле компьютера скрывается. Ход компьютера заканчивается.

Рисунок 7 - Компьютер нажал кнопку атаки

Заключение


В ходе курсовой работы были разобраны принципы, по которым работает компьютерная игра «Магия Слов» от компании Alawar Entertainment. Они были использованы для написания собственной игры. При программировании использовался фреймворк cocos2dx, языком создания программы был С++.

Логика игры «Магия Слов» была в большей части воспроизведена в курсовой работе, за исключением элементов, дополняющие геймплей игры. Воссозданная игра может не может использоваться наравне с оригинальной версий, ввиду того, что искусственный интеллект должен создавать слова, а не использовать свои атаки.

Библиографический список


1. Керниган, Б. Язык программирования C /Б. Керниган, Д. Ритчи. Вильямс, 2012. 304 с.

. Пошаговая инструкция по разработке простых игр на cocos2dx [Электронный ресурс] / http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Step_by_Step_Cocos2dxSimpleGame_Series.

..Мануал пользователя [Электронный ресурс] / http://www.cocos2d-x.org/projects/cocos2d-x/wiki

Похожие работы на - Технология программирования: игра 'Бой словами'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!