Jump to content
Hulle

Ajuda com jogo Snake

Recommended Posts

Hulle

Olá, estou querendo criar minha versão do jogo da cobrinha para exercitar, mas preciso de uma ajuda. Eu criei um loop para o movimento, quando determinada seta é pressionada começa o movimento da cobrinha, mas depois que se inicia o loop o programa não lê mais nemhuma tecla e fica sempre indo na mesma direção.

É um jogo da cobrinha no DOS com as bibliotecas padrões do c++

Share this post


Link to post
Share on other sites
Hulle

Estou começando então só fiz a parte do movimento.

#include <Windows.h>
#include <iostream>

using namespace std;

class CSnake
{
private:
   COORD Position;
   HANDLE sOutput, sInput;
   INPUT_RECORD InputRecord;
   DWORD Events = 0;

public:
   void DrawSnake(int draw);
   void MoveSnake();

};
void CSnake::DrawSnake(int draw)
{
   //Descrição: Desenha e apaga a snake;

   if (draw == 1)
   {
       SetConsoleCursorPosition(sOutput, Position);
       cout << "#";
   }
   else
   {
       SetConsoleCursorPosition(sOutput, Position);
       cout << " ";
   }

}

void CSnake::MoveSnake()
{
   sInput = GetStdHandle(STD_INPUT_HANDLE);
   sOutput = GetStdHandle(STD_OUTPUT_HANDLE);

   ReadConsoleInput(sInput, &InputRecord, 1, &Events);
   if (InputRecord.EventType == KEY_EVENT && InputRecord.Event.KeyEvent.bKeyDown)
   {
       if (InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_RIGHT)
       {
           do
           {
               Sleep(100);
               DrawSnake(0);
               Position.X++;
               DrawSnake(1);
           } while (1);
       }
       else if (InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_LEFT)
       {
           do
           {
               Sleep(100);
               DrawSnake(0);
               Position.X--;
               DrawSnake(1);
           } while (1);
       }
       else if (InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_UP)
       {
           do
           {
               Sleep(100);
               DrawSnake(0);
               Position.Y--;
               DrawSnake(1);
           } while (1);
       }
       else if (InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_DOWN)
       {
           do
           {
               Sleep(100);
               DrawSnake(0);
               Position.Y++;
               DrawSnake(1);
           } while (1);
       }
   }

}



void main()
{
   CSnake Snake;
   while (1)
   {
       Snake.MoveSnake();
   }

}

Edited by Hulle

Share this post


Link to post
Share on other sites
HappyHippyHippo

isso é código do windows ... terás de esperar por outra pessoa, ou dar-me tempo para ver a doc dessas funções


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
php master Damian/ao

Ola Hulle, eu tinha um nokia 3310 e nunca tive esse problema, devias experimentar. Abraços

Ps VÊ a documentação , tlvz te safes.

Share this post


Link to post
Share on other sites
BernardoLourenco

Porque e que nao usas uma biblioteca de graficos melhor que o API do windows? Podes usar, por exemplo, a SFML, que esta em c++ (OOP) e funciona em windows, linux e ios.

  • Vote 1

Share this post


Link to post
Share on other sites
FMC

Se calhar estou a falar asneira, mas sabendo bases de c++ não deveria ser while(VARIAVEL==1)? do que: while(1)?

Share this post


Link to post
Share on other sites
HappyHippyHippo

Se calhar estou a falar asneira, mas sabendo bases de c++ não deveria ser while(VARIAVEL==1)? do que: while(1)?

depende sempre do que queres fazer no ciclo e/ou como controlar-lo


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.