Четверг, 25 Апреля 2024, 20:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум игроделов » Программирование » C/C++ » Необходима помощь в освоении азов создания игр
Необходима помощь в освоении азов создания игр
redinardДата: Понедельник, 24 Октября 2011, 22:00 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Я решил занятся созданием игр,начал с самых азов ,написал код,но допустил ошибку и не могу разобратся где она.
Помогите найти её,вот код:
Code

#include <iostream>
#include <string>
using namespace std;
enum SquareState {blank =' ',X='X',O='O'};
class gameBoard
{
private:
const int WIDTH;
const int HEIGHT;
int* GameBoard;
public:
gameBoard():WIDTH(3),HEIGHT(3)
{
GameBoard=new int[9];
for (int i=0;i<9;i++)
*(GameBoard+i)=blank;
}
~gameBoard(){delete[]GameBoard;}
void setX(int h,int w);
void setO(int h,int w);
bool isTaken(int h,int w);
SquareState isLine();
void draw();
};
void gameBoard::setX(int h,int w)
{
*(GameBoard+h*HEIGHT+w)=X;
}
void gameBoard::setO(int h,int w)
{
*(GameBoard+h*HEIGHT+w)=O;
}
bool gameBoard::isTaken(int h,int w)
{
return*(GameBoard+h*HEIGHT+w)!=' ';
}
SquareState gameBoard::isLine()
{
if(*GameBoard==X &&*(GameBoard+1)==X &&*(GameBoard+2)==X)
return X;
if(*GameBoard==O &&*(GameBoard+1)==O &&*(GameBoard+2)==O)
return O;
if(*(GameBoard+3)==3 &&*(GameBoard+4)==X &&*(GameBoard+5)==X)
return X;
if(*(GameBoard+3)==3 &&*(GameBoard+4)==O &&*(GameBoard+5)==O)
return O;
if(*(GameBoard+6)==X &&*(GameBoard+7)==X &&*(GameBoard+8)==X)
return X;
if(*(GameBoard+6)==O &&*(GameBoard+7)==O &&*(GameBoard+8)==O)
return O;

if(*GameBoard==X &&*(GameBoard+3)==X &&*(GameBoard+6)==X)
return X;
if(*GameBoard==X &&*(GameBoard+3)==O &&*(GameBoard+6)==O)
return O;
if(*(GameBoard+1)==X &&*(GameBoard+4)==X &&*(GameBoard+7)==X)
return X;
if(*(GameBoard+1)==X &&*(GameBoard+4)==O &&*(GameBoard+7)==O)
return O;
if(*(GameBoard+2)==X &&*(GameBoard+5)==X &&*(GameBoard+8)==X)
return X;
if(*(GameBoard+2)==X &&*(GameBoard+5)==O &&*(GameBoard+8)==O)
return O;

if(*GameBoard==X &&*(GameBoard+4)==X &&*(GameBoard+8)==X)
return X;
if(*GameBoard==O &&*(GameBoard+4)==X &&*(GameBoard+8)==O)
return O;
if(*(GameBoard+2)==X &&*(GameBoard+4)==X &&*(GameBoard+6)==X)
return X;
if(*(GameBoard+2)==X &&*(GameBoard+4)==X &&*(GameBoard+6)==X)
return O;
return blank;
}
void gameBoard::draw()
{
cout<<endl;
for(int i=1;i<HEIGHT;i++)
{
cout<<(char)*(GameBoard+i*HEIGHT);
for(int c=1;c<WIDTH;c++)
cout<<"|"<<(char)*(GameBoard+i*WIDTH+c);
cout<<endl<<"------------"<<endl;
}
}
class Game
{
public:
gameBoard* doInput(string player,gameBoard* gb);
bool inRange(int test);
};
gameBoard* Game::doInput(string player,gameBoard* gb)
{
gb->draw();
string letter;
if (player.compare("îäèí")==O)
letter="X";
else if (player.compare("äâà")==O)
letter="O";
else return gb;
int input1,input2;
do{
do{
cout<<"\nÈãðîê"<<player.c_str()
<<",ïîæàëóéñòà ââåäèòå íîìåð ðÿäà äëÿ"
<<letter.c_str()<<":";
cin>>input1;
}while(!inRange(input1));
do{
cout<<"\nÈãðîê"<<player.c_str()
<<",ïîæàëóéñòà ââåäèòå íîìåð ðÿäà äëÿ"
<<letter.c_str()<<":";
cin>>input2;
}while(gb->isTaken(input1,input2));
if(player.compare("îäèí")==O)
gb->setX(input1,input2);
else gb->setO(input1,input2);
return gb;
}
bool Game::inRange(int test)
{
return test> -1 && test< 3;
}
int main(void)
{
gameBoard* gb=new gameBoard;
Game g;
string player1,plaer2;
cout<<"Äîáðî ïîæàëîâàòü â êðåñòèêè íîëèêè!"
<<"\nãðîê 1 ââåäèòå ñâî¸ èìÿ: ";
cin>>plaeyr1;
cout<<"\nÈãðîê 2 ââåäèòå ñâî¸ èìÿ: ";
cin>>player2;
while (gb->isLine()==C C)
{
gb=g.doInput("îäèí"gb);
gb=g.doInput("äâà"gb);
}
gb->draw();
if(gb->isLine()==X)
cout<<"\nÈãðîê 1 âû ïîáåäèëè !"
<<"\nÊîíåö èãðû.";
else cout<<"\nÈãðîê 2 âû ïîáåäèëè !"
<<"\nÊîíåö èãðû.";
return 0;
}


Я белый и пушистый но имею когти и зубы

Сообщение отредактировал redinard - Понедельник, 24 Октября 2011, 22:06
LQarumДата: Понедельник, 24 Октября 2011, 22:25 | Сообщение # 2
был не раз
Сейчас нет на сайте
Код ошибкм в студию, здесь экстрасенсов нет, некоторые может на планшете и у них нет скролла кода, но по коду ошибки сразу укажут на нее?

Пишу все подряд на плюсах...
redinardДата: Понедельник, 24 Октября 2011, 22:30 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
я же привёл код программы , необходимо просто скомпилировать и увидеть что не так ...

Я белый и пушистый но имею когти и зубы
AGDevДата: Понедельник, 24 Октября 2011, 22:35 | Сообщение # 4
был не раз
Сейчас нет на сайте
Quote (redinard)
string player1,plaer2;
cout<<"Äîáðî ïîæàëîâàòü â êðåñòèêè íîëèêè!"
<<"\nãðîê 1 ââåäèòå ñâî¸ èìÿ: ";
cin>>plaeyr1;
cout<<"\nÈãðîê 2 ââåäèòå ñâî¸ èìÿ: ";
cin>>player2;


определись с названиями переменных для начала))
redinardДата: Понедельник, 24 Октября 2011, 22:42 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
это в принципе мелочи меня вот этот участок больше беспокоит:
}
bool Game::inRange(int test)
{


Я белый и пушистый но имею когти и зубы

Сообщение отредактировал redinard - Понедельник, 24 Октября 2011, 22:47
AGDevДата: Понедельник, 24 Октября 2011, 22:53 | Сообщение # 6
был не раз
Сейчас нет на сайте
Quote
gameBoard* Game::doInput(string player,gameBoard* gb)
{
gb->draw();
string letter;
if (player.compare("îäèí")==O)
letter="X";
else if (player.compare("äâà")==O)
letter="O";
else return gb;
int input1,input2;
do{//А где закрывается этот цикл????
do{
cout<<"\nÈãðîê"<<player.c_str()
<<",ïîæàëóéñòà ââåäèòå íîìåð ðÿäà äëÿ"
<<letter.c_str()<<":";
cin>>input1;
}while(!inRange(input1));
do{
cout<<"\nÈãðîê"<<player.c_str()
<<",ïîæàëóéñòà ââåäèòå íîìåð ðÿäà äëÿ"
<<letter.c_str()<<":";
cin>>input2;
}while(gb->isTaken(input1,input2));
if(player.compare("îäèí")==O)
gb->setX(input1,input2);
else gb->setO(input1,input2);
return gb;

}
redinardДата: Понедельник, 24 Октября 2011, 23:03 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
спасибо ! Сейчас ещё один код подкину для проверки

Добавлено (24.10.2011, 23:02)
---------------------------------------------
Code


#include <iostream>
#include <cstring>
#include "Bow.h"
using namespace std;

class ArcheryCompetition
{
        private:
         int rounds;
         float redScore;
         Bow red;
         float blueScore;
         Bow blue;
        public:
         ArcheryCompetition(int lrounds);
         ~ArcheryCompetition();
         int compete(void);
};
   ArcheryCompetition::ArcheryCompetition(int lrounds):
   rounds(lrounds),red(Bow("красный")),
   blue(Bow("синий")),redScore(0),blueScore(0)
   {
}
ArcheryCompetition::~ArcheryCompetition()
{
                     }
int ArcheryCompetition::compete()
{
      for(int i=0;i<rounds;i++)
      {
              cout<<"Тут номер "<<i+1<<"."<<endl;
              red.draw();
              blue.draw();
              redScore = (red.fire()+redScore * i)/(i+1);
              blueScore = (blue.fire()+redScore * i)/(i+1);
      }
        if(redScore==blueScore)
        cout<<"ничья !!!\n";
        else if(redScore<blueScore)
        cout<<"синий лук победил\n";
        else
        cout<<"красный лук победил\n";
        return 1;
}
void main(void)
{
      ArcheryCompetition plymouthSquare(2);
      plymouthSquare.compete();
      int get=0;
      cin>>get;
}   


Добавлено (24.10.2011, 23:03)
---------------------------------------------
Code

// bow.h
class Bow
{
    string color;
      bool drawn;
      int numOfArrows;
    public:
      Bow(string aColor);
      ~Bow();
        
      void draw();
      int fire();
};
      


Я белый и пушистый но имею когти и зубы

Сообщение отредактировал redinard - Понедельник, 24 Октября 2011, 23:04
AGDevДата: Понедельник, 24 Октября 2011, 23:25 | Сообщение # 8
был не раз
Сейчас нет на сайте
а где описание методов класса Bow?

Сообщение отредактировал AGDev - Понедельник, 24 Октября 2011, 23:27
redinardДата: Вторник, 25 Октября 2011, 00:27 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
не знаю если честно,код был взят с книги,даже под себя не интерпритировал ...

Добавлено (25.10.2011, 00:27)
---------------------------------------------
создал менюшку и в очередной раз наткнулся на проблемму

Code

// hello.cpp
#include <iostream>
#include "MenuUtility.h"
using namespace std;

int main(void)
{
     using namespace menuNamespace;
     string example[]={"àòàêîâàòü","îòñòóïàòü"};
     menu(example,2);
     return 0;
}

Code

//MenuUtility.cpp
#include <iostream>
#include <string>
using namespace std;

namespace menuNamespace
{
           int menu(string*strArray,int size)
           {
               int userResponse;
               cout<<"Âàðèàíòû: ";
               while(userResponse <1||userResponse>size)
               {
                 for(int i=0;i<size;i++)
                 {
                         cout<<i+1<<")"<<strArray[i]<<endl;
                 }
                 cin>>userResponse;
                 }
           return userResponse;
           }
}

Code

//MenuUtillity.h
#include <iostream>
#include <string>
using namespace std;
namespace menuNamespace
{
           int menu(string* strArray,int size);
}


Я белый и пушистый но имею когти и зубы
0x90Дата: Вторник, 25 Октября 2011, 09:53 | Сообщение # 10
участник
Сейчас нет на сайте
Код Вашей "менюшки" успешно компилируется(и собирается), но у меня такое чувство, будто вы абсолютно не понимаете, что пишите. Лучше выучите сначала азы С++.
Code

int userResponse;

Интересно, в книге так и написано? То есть переменной userResponce не присваивается начальное значение?
redinardДата: Вторник, 25 Октября 2011, 12:35 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Да действительно в книге так и написанно,и азы программирования я выучил(я уже второй курс на программиста учусь),а в какой проге эта минюшка успешно скомпилировалась ?

Я белый и пушистый но имею когти и зубы
0x90Дата: Вторник, 25 Октября 2011, 12:41 | Сообщение # 12
участник
Сейчас нет на сайте
Quote
Да действительно в книге так и написанно

Ну тогда, в данном случае, это очевидный ляп автора.
Quote
а в какой проге эта минюшка успешно скомпилировалась ?

В VC++ 2008. Но компилировать должны и все остальные компиляторы, ошибок я не вижу. Вы чем компилируете? Покажите лог ошибки.
redinardДата: Вторник, 25 Октября 2011, 12:45 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
Я компилирую в Dev C++
Quote
[Linker error] undefined reference to `menuNamespace::menu(std::string*, int)'
ld returned 1 exit status


Я белый и пушистый но имею когти и зубы
0x90Дата: Вторник, 25 Октября 2011, 12:57 | Сообщение # 14
участник
Сейчас нет на сайте
Хмм, сейчас потестирую и с MinGW

Добавлено (25.10.2011, 12:57)
---------------------------------------------
Все комплится и собирается прекрасно. Есть подозрения, что вы пытаетесь инклудить MenuUtility.h, в то время, как файл называется MenuUtillity.h

redinardДата: Вторник, 25 Октября 2011, 13:06 | Сообщение # 15
постоянный участник
Сейчас нет на сайте
Сейчас откомпилировал в MVC ,всё работает,вот только он не понимает русский язык ((

Я белый и пушистый но имею когти и зубы
0x90Дата: Вторник, 25 Октября 2011, 13:13 | Сообщение # 16
участник
Сейчас нет на сайте
Внутри функции main
Code
setlocale( LC_ALL, "rus" );

Добавлено (25.10.2011, 13:13)
---------------------------------------------
P.S. Что за книга?

redinardДата: Вторник, 25 Октября 2011, 17:43 | Сообщение # 17
постоянный участник
Сейчас нет на сайте
"программирование на С++" марк ли,дирк хенкеманс

Добавлено (25.10.2011, 13:22)
---------------------------------------------
Я кстати разобрался в Dev C++?а
Quote
setlocale( LC_ALL, "rus" );
для MVC++ 6 не катит,компилируется,но при запуске выдаёт ошибку...

Добавлено (25.10.2011, 17:43)
---------------------------------------------
вот ещё один код на ваше обозрение
Code

// pirateTawn.cpp
#include <iostream>
#include <string>
#include "MenuUtility.h"
#include "pirateTown.h"
using namespace std;

using menuNamespace::menu;

namespace wharf
{
     void menu()
{
        string options[]=
        {"ïðûãíóòü â âîäó",
        "âçÿòü ãðåáíóþ øëþïêó è óïëûòü â çâêàò.",
        "âçîéòè íà áîðò êðîâàâîãî âåòðà.",
        "îòïðàâèòñÿ â ãîðîä"};
        int userResponse=::menu(options,4);
          
        switch(userResponse)
        {
          case 1:
               cout<<"Òû ïðûãàåøü â âîäó."
                   <<"Âíåçàïíî òû ñëûøèøü"
                   <<"ñìåõ,è òóò æå\n"
                   <<"îñîçíà¸øü ÷òî çàáûë"
                   <<"ñíÿòü îäåæäó."
                   <<"Òû âûëàçèåøü èç âîäû"
                   <<"ïðîìîêøèé íàñêâîçü\n";
                   menu();
                   break;
          case 2:
               cout<<"Òû õâàòàåøü íå áîëüøóþ êðàñíóþ ëîäêó "
                   <<"è óïëûâàåøü â çàêàò"
                   <<"Àõ,ñëàâà."<<endl;
                   break;
          case 3:
               cout<<"Òû âîçâðàùàåøñÿ íà áîðò êðîâàâîãî âåòðâ"
                   <<"è æä¸øü êîãäà âåðíóòñÿ òâîè äðóçüÿ,"
                   <<"âäîâîëü íàâåñåëèâøèñü. \n";
                   break;
          case 4:
               street::menu();
               break;
}
}
}
//îáðàáîòêà ñîáûòèé â òàâåðíå
namespace tavern
{
   void menu(void)
   {
      string options[]=
      {"Çôêàçàòü âûïèâêó"
      "Íà÷àòü øóìíóþ äðàêó"
      "Âûòè íà óëèöó."};
      int userResponse=::menu(options,3);
        
      switch(userResponse)
      {
       case 1:
              cout<<"Òû çàêàçàë êîêòåéëü"
                  <<"\"ËÅÍÒßÉ\"\n";
                  menu();
                  break;
       case 2:
            cout<<"Òû íà÷àë øóìíóþ äðàêó\n";
            menu();
            break;
       case 3:
            street::menu();
            break;
       }
}
}
//îáðàáîòêà ñîáûòèé ïðîèñõîäÿøèõ íà óëèöå
namespace street
{
    void menu(void)
    {
        string options[]=
        {"Äâèíóòñÿ ê ïðè÷àëó",
        "Âîéòè â òàâåðíó",
        "Âîéòèâ îðóæåéíûé ìàãàçèí",
        "Íà÷àòü äðàêó."};
        int userResponse=::menu(options,4);
        switch(userResponse)
        {
          case 1:
               wharf::menu();
               break;
          case 2:
               tavern::menu();
               break;
          case 3:
                weaponShop::menu();
                break;
          case 4:
               cout<<"Òû íà÷àë îòëè÷íóþ äðàêó íà óëèöå\n";
               street::menu();
               break;
        }
}
}
//ïîêóïêà îðóæèÿ
namespace weaponShop
{
            void menu(void)
            {
                 string options[]=
                 {"Êóïèòü êèíæàë èíõðóñòèðîâàííûé äðàãîöåííûìè êàìíÿìè çà 300",
                 "Êóïèòü êðåìíåâûé ìóøêåò çà 300 ",
                 "Êóïèòü ñòàíäàðòíóþ áîåâóþ ñàáëþ çà 100 ",
                 "Óéòèèç ìàãàçèíà."};
                 int userResponse=::menu(options,4);
                 switch(userResponse)
                 {
                   case 1:
                        cout<<"Òû êóïèë êèíæàë"
                            <<"è ñïðÿòàë åãî â êàðìàí\n"   
                            <<"óïëàòèâ êîñòëÿâîìó ìóæ÷èíå "   
                            <<"çà ïðèëàâêîì\n";
                        menu();
                        break;
                   case 2:
                        cout<<"Çàïëàòèâ çàìóøêåò,"
                            <<"òû ñðàçó îöåíèë åãî."   
                            <<"Îí ïðåâîñõîäíî äåéñòâóåò !!!\n";
                        menu();
                        break;
                   case 3:
                        cout<<"Âçìàõíóâ ñàáëåé ïàðó ðàç òû ïîíèìàåøü\n"
                            <<"÷òî îíà íå ñòîèò"
                            <<"ïîòðà÷åííîãî çîëîòà\n";
                        menu();
                        break;
                   case 4:
                        street::menu();
                        break;
                   }
}
}
// íà÷àëî èãðû
int main(void)
{
      cout<<"Òâîé êîðàáûëü êðîâàâûé âåòåð âîøîë â äîêè"
          <<"Òû ñîøîë ñ\n"
          <<"êîðîáëÿ è ñòîèøü íà ïðè÷àëåþ\n\n";
      wharf::menu();
      return 0;
}              


Code

// pirateTawn.h
#include <iostream>
#include <string>
#include "MenuUtility.h"
using namespace std;
//îáÿâëåíèÿ ôóíêöèé
namespace street
{
            void menu(void);
}
namespace weaponShop
{
            void menu(void);
}
namespace wharf
{
          void menu(void);
}
namespace tavern
{
            void menu(void);
}        

Code

// MenuUtility.h
#include <iostream>
#include <string>
using namespace std;
namespace menuNamespace
{
            int menu(string* strArray,int size);
}


Я белый и пушистый но имею когти и зубы

Сообщение отредактировал redinard - Вторник, 25 Октября 2011, 18:06
0x90Дата: Вторник, 25 Октября 2011, 17:45 | Сообщение # 18
участник
Сейчас нет на сайте
Нельзя эти крякозябры заменить чем-нибудь более вменяемым? И что значит "ещё один код на ваше обозрение"? Там ошибка, или просто так, чтобы завидовали, решил показать?
redinardДата: Вторник, 25 Октября 2011, 17:56 | Сообщение # 19
постоянный участник
Сейчас нет на сайте
Логично что там ошибка,я бы просто так код бы не выкладывал,а эти кракозябли это русский текст,я не виноват что сайт его не понимает(хотя в одном из выложеных мной кодов он понял),но они то собственно и не мишают ...

Добавлено (25.10.2011, 17:56)
---------------------------------------------
а конкретнее компилятор ругается на :

Quote
using menuNamespace::menu;


Я белый и пушистый но имею когти и зубы
0x90Дата: Вторник, 25 Октября 2011, 18:02 | Сообщение # 20
участник
Сейчас нет на сайте
Твой хедер наз-ся pitateTawn.h, а подключаешь ты pirateTown.h. Это единственная ошибка в коде.
Форум игроделов » Программирование » C/C++ » Необходима помощь в освоении азов создания игр
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг