Ir ao conteúdo

Como começar a criar um jogo em C++


ReneGustavo

Posts recomendados

Postado

Fala galera, beleza?

Bom, eu estudo no CEFET-MG, faço o curso de Informática, estou no 1º ano do Ensino Médio, e já estou acabando o curso de C++. Eu meus amigos estavamos querendo começar o desenvolvimento de um jogo, simples, mas não temos noção de como começar, e o que é preciso para isso.

Por isso peço à vocês, como começo a fazer isos? Qual o nível de conhecimento de C++ necessário para iniciar o projeto? Quais os programas necessários para fazer isso?

Aguardo ajudas, desde já agradeço! Obrigado! Até mais!

Postado

De começo você precisa saber afundo as regras do jogo que vai desenvolver, e o mais importante de tudo e ter bastante paciência para programar heheh...

Em um trabalho da facul tive que fazer o jogo campo minado, e foi meio trabalhoso de fazer, pois não conhecia exatamente as regras do jogo e tal... Resumindo tive que aprender todas as regras, planejar cada função e implementa - las, verificando cansativamente o funcionamento e a execução para não ocorrer bugs.

Contudo é bem estressante, mas o resultado final do programa superar todo esse estresse.

Postado

Procure se informar sobre alguma engine de jogos, vai te economizar anos luz de tempo.

Existem alguns conceitos comuns de desenvolvimento de jogos que precisam conehecer, tipo Game Loop, renderização, atualização de componentes, colisões, animações, etc. Procura não faltam tutoriais sobre este assunto.

Te recomendo procurar sobre Allegro ou SDL.

Postado

Tenho esse jogo da velha com um bug mas é bastante interessante, não é de minha autoria.


#include<stdlib.h>
#include<conio.h>

char vel[][4] = { {' ',' ',' '},{' ',' ',' '}, {' ',' ',' '} };
int k, z;
int j1;
int j2;
int you=0;
int pc=0;

int imprime(void);
int lerp(void);
int troca(int s, int t);
int xwin(void);
int owin(void);
int jogapc(void);
int resetar(void);

int imprime() {
printf("\n");
printf(" Voc\x88: %d / Computador: %d \n\n", you, pc);
printf(" C1 C2 C3\n\n");
for(z=0; z<3; z++) {
if(z==0) printf("L1");
if(z==1) printf("L2");
if(z==2) printf("L3");
for(k=0; k<3; k++) {
if(k==0) printf(" %c ", vel[z][k]);
else printf(" %c ", vel[z][k]);
if(k<2) printf("|");
}
if(z<2) printf("\n -----------\n");
}
printf("\n\n");
}



int troca(int s, int t) {

if(vel[s-49][t-49]=='x' || vel[s-49][t-49]=='o')
{
printf("\n\nEspa\x87o j\xA0 preenchido\n");
lerp();
}
if(vel[s-49][t-49]==' ') vel[s-49][t-49]='x';

}



int lerp() {
int i, j;

printf("\nDigite as coordenadas de sua jogada:\n\nL:");

i=getche();

printf("\nC:");
j=getche();

if(i>=49 && i<52 && j>=49 && j<52) troca(i,j);
else {
printf("\n\nERRO!\n\nCoordenada inv\xA0lida.\n\n");
lerp();
}

}



int xwin() {
printf("\nVoc\x88 GANHOU!\n");
you++;
resetar();
}


int owin() {
printf("\nVoc\x88 PERDEU!\n");
pc++;
resetar();
}



int jogapc() {

int x=1;

if(vel[2][2]=='x' && vel[0][2]=='x')
if(vel[1][2]==' ' && x)
{
vel[1][2]='o';
x=0;
}

if(vel[2][0]=='x' && vel[0][2]=='x')
if(vel[1][0]==' ' && x)
{
vel[1][0]='o';
x=0;
}

/*ATAQUES*/

/* ataques => diagonal secundária */

if(vel[2][0]=='o' && vel[1][1]=='o')
if(vel[0][2]==' ' && x)
{
vel[0][2]='o';
x=0;
}
if(vel[0][2]=='o' && vel[2][2]=='o')
if(vel[2][0]==' ' && x)
{
vel[2][0]='o';
x=0;
}
if(vel[2][0]=='o' && vel[0][2]=='o')
if(vel[1][1]==' ' && x)
{
vel[1][1]='o';
x=0;
}

/* ataques => diagonal principal */

if(vel[0][0]=='o' && vel[1][1]=='o')
if(vel[2][2]==' ' && x)
{
vel[2][2]='o';
x=0;
}
if(vel[1][1]=='o' && vel[2][2]=='o')
if(vel[0][0]==' ' && x)
{
vel[0][0]='o';
x=0;
}
if(vel[0][0]=='o' && vel[2][2]=='o')
if(vel[1][1]==' ' && x)
{
vel[1][1]='o';
x=0;
}

/* ataques => coluna 1: */

if(vel[0][0]=='o' && vel[1][0]=='o')
if(vel[2][0]==' ' && x)
{
vel[2][0]='o';
x=0;
}
if(vel[1][0]=='o' && vel[2][0]=='o')
if(vel[0][0]==' ' && x)
{
vel[0][0]='o';
x=0;
}
if(vel[0][0]=='o' && vel[2][0]=='o')
if(vel[1][0]==' ' && x)
{
vel[1][0]='o';
x=0;
}

/* ataques => coluna 2: */

if(vel[0][1]=='o' && vel[1][1]=='o')
if(vel[2][1]==' ' && x)
{
vel[2][1]='o';
x=0;
}
if(vel[1][1]=='o' && vel[2][1]=='o')
if(vel[0][1]==' ' && x)
{
vel[0][1]='o';
x=0;
}
if(vel[0][1]=='o' && vel[2][1]=='o')
if(vel[1][1]==' ' && x)
{
vel[1][1]='o';
x=0;
}

/* ataques => coluna 3: */

if(vel[0][2]=='o' && vel[1][2]=='o')
if(vel[2][2]==' ' && x)
{
vel[2][2]='o';
x=0;
}
if(vel[1][2]=='o' && vel[2][2]=='o')
if(vel[0][2]==' ' && x)
{
vel[0][2]='o';
x=0;
}
if(vel[0][2]=='o' && vel[2][2]=='o')
if(vel[1][2]==' ' && x)
{
vel[1][2]='o';
x=0;
}

/* ataques => linha 1: */

if(vel[0][0]=='o' && vel[0][1]=='o')
if(vel[0][2]==' ' && x)
{
vel[0][2]='o';
x=0;
}
if(vel[0][1]=='o' && vel[0][2]=='o')
if(vel[0][0]==' ' && x)
{
vel[0][0]='o';
x=0;
}
if(vel[0][0]=='o' && vel[0][2]=='o')
if(vel[0][1]==' ' && x)
{
vel[0][1]='o';
x=0;
}

/* ataques => linha 2: */

if(vel[1][0]=='o' && vel[1][1]=='o')
if(vel[1][2]==' ' && x)
{
vel[1][2]='o';
x=0;
}
if(vel[1][1]=='o' && vel[1][2]=='o')
if(vel[1][0]==' ' && x)
{
vel[1][0]='o';
x=0;
}
if(vel[1][0]=='o' && vel[1][2]=='o')
if(vel[1][1]==' ' && x)
{
vel[1][1]='o';
x=0;
}

/* ataues => linha 3: */

if(vel[2][0]=='o' && vel[2][1]=='o')
if(vel[2][2]==' ' && x)
{
vel[2][2]='o';
x=0;
}
if(vel[2][1]=='o' && vel[2][2]=='o')
if(vel[2][0]==' ' && x)
{
vel[2][0]='o';
x=0;
}
if(vel[2][0]=='o' && vel[2][2]=='o')
if(vel[2][1]==' ' && x)
{
vel[2][1]='o';
x=0;
}

/* JOGADA 1 */

if(j1 && x)
{
if(vel[0][0]=='x')
{
vel[1][1]='o';
x=0;
j1=0;
}
if(vel[1][1]=='x')
{
vel[2][0]='o';
x=0;
j1=0;
}
if(vel[2][2]=='x')
{
vel[1][1]='o';
x=0;
j1=0;
}
if(vel[0][1]=='x')
{
vel[0][2]='o';
x=0;
j1=0;
}
if(vel[0][2]=='x')
{
vel[1][1]='o';
x=0;
j1=0;
}
if(vel[1][0]=='x')
{
vel[0][2]='o';
x=0;
j1=0;
}
if(vel[1][2]=='x')
{
vel[2][0]='o';
x=0;
j1=0;
}
if(vel[2][0]=='x')
{
vel[1][1]='o';
x=0;
j1=0;
}
if(vel[2][1]=='x')
{
vel[0][0]='o';
x=0;
j1=0;
}
}

/* DEFESAS */

/* defesas => diagonal secundária */

if(vel[2][0]=='x' && vel[1][1]=='x')
if(vel[0][2]==' ' && x)
{
vel[0][2]='o';
x=0;
}
if(vel[0][2]=='x' && vel[2][2]=='x')
if(vel[2][0]==' ' && x)
{
vel[2][0]='o';
x=0;
}
if(vel[2][0]=='x' && vel[0][2]=='x')
if(vel[1][1]==' ' && x)
{
vel[1][1]='o';
x=0;
}

/* defesas => diagonal principal */

if(vel[0][0]=='x' && vel[1][1]=='x')
if(vel[2][2]==' ' && x)
{
vel[2][2]='o';
x=0;
}
if(vel[1][1]=='x' && vel[2][2]=='x')
if(vel[0][0]==' ' && x)
{
vel[0][0]='o';
x=0;
}
if(vel[0][0]=='x' && vel[2][2]=='x')
if(vel[1][1]==' ' && x)
{
vel[1][1]='o';
x=0;
}

/* defesas => coluna 1: */

if(vel[0][0]=='x' && vel[1][0]=='x')
if(vel[2][0]==' ' && x)
{
vel[2][0]='o';
x=0;
}
if(vel[1][0]=='x' && vel[2][0]=='x')
if(vel[0][0]==' ' && x)
{
vel[0][0]='o';
x=0;
}
if(vel[0][0]=='x' && vel[2][0]=='x')
if(vel[1][0]==' ' && x)
{
vel[1][0]='o';
x=0;
}

/* defesas => coluna 2: */

if(vel[0][1]=='x' && vel[1][1]=='x')
if(vel[2][1]==' ' && x)
{
vel[2][1]='o';
x=0;
}
if(vel[1][1]=='x' && vel[2][1]=='x')
if(vel[0][1]==' ' && x)
{
vel[0][1]='o';
x=0;
}
if(vel[0][1]=='x' && vel[2][1]=='x')
if(vel[1][1]==' ' && x)
{
vel[1][1]='o';
x=0;
}

/* defesas => coluna 3: */

if(vel[0][2]=='x' && vel[1][2]=='x')
if(vel[2][2]==' ' && x)
{
vel[2][2]='o';
x=0;
}
if(vel[1][2]=='x' && vel[2][2]=='x')
if(vel[0][2]==' ' && x)
{
vel[0][2]='o';
x=0;
}
if(vel[0][2]=='x' && vel[2][2]=='x')
if(vel[1][2]==' ' && x)
{
vel[1][2]='o';
x=0;
}

/* defesas => linha 1: */

if(vel[0][0]=='x' && vel[0][1]=='x')
if(vel[0][2]==' ' && x)
{
vel[0][2]='o';
x=0;
}
if(vel[0][1]=='x' && vel[0][2]=='x')
if(vel[0][0]==' ' && x)
{
vel[0][0]='o';
x=0;
}
if(vel[0][0]=='x' && vel[0][2]=='x')
if(vel[0][1]==' ' && x)
{
vel[0][1]='o';
x=0;
}

/* defesas => linha 2: */

if(vel[1][0]=='x' && vel[1][1]=='x')
if(vel[1][2]==' ' && x)
{
vel[1][2]='o';
x=0;
}
if(vel[1][1]=='x' && vel[1][2]=='x')
if(vel[1][0]==' ' && x)
{
vel[1][0]='o';
x=0;
}
if(vel[1][0]=='x' && vel[1][2]=='x')
if(vel[1][1]==' ' && x)
{
vel[1][1]='o';
x=0;
}

/* defesas => linha 3: */

if(vel[2][0]=='x' && vel[2][1]=='x')
if(vel[2][2]==' ' && x)
{
vel[2][2]='o';
x=0;
}
if(vel[2][1]=='x' && vel[2][2]=='x')
if(vel[2][0]==' ' && x)
{
vel[2][0]='o';
x=0;
}
if(vel[2][0]=='x' && vel[2][2]=='x')
if(vel[2][1]==' ' && x)
{
vel[2][1]='o';
x=0;
}

/* JOGADA 2 */

if(vel[0][0]=='x' && vel[1][1]=='x' && vel[2][2]=='o')
{
if(x)
{
if(vel[2][0]==' ')
{
vel[2][0]='o';
x=0;
}
else
{
if(vel[0][2]==' ')
{
vel[0][2]='o';
x=0;
}
}
}
}

if(vel[0][0]=='x' && vel[2][1]=='x')
{
if(x && j2)
{
if(vel[2][0]==' ')
{
vel[2][0]='o';
x=0;
j2=0;
}
else
{
if(vel[1][0]==' ')
{
vel[1][0]='o';
x=0;
j2=0;
}
}
}
}

if(vel[0][0]=='x' && vel[1][2]=='x')
{
if(x && j2)
{
if(vel[0][2]==' ')
{
vel[0][2]='o';
x=0;
j2=0;
}
else
{
if(vel[0][1]==' ')
{
vel[0][1]='o';
x=0;
j2=0;
}
}
}
}

if(vel[0][1]=='x' && vel[1][0]=='x')
{
if(x && j2)
{
if(vel[0][0]==' ')
{
vel[0][0]='o';
x=0;
j2=0;
}
else
{
if(vel[1][1]==' ')
{
vel[1][1]='o';
x=0;
j2=0;
}
}
}
}

if(vel[0][1]=='x' && vel[2][0]=='x')
{
if(x && j2)
{
if(vel[1][1]==' ')
{
vel[1][1]='o';
x=0;
j2=0;
}
else
{
if(vel[0][0]==' ')
{
vel[0][0]='o';
x=0;
j2=0;
}
}
}
}

if(vel[0][1]=='x' && vel[1][2]=='x')
{
if(x && j2)
{
if(vel[0][2]==' ')
{
vel[0][2]='o';
x=0;
j2=0;
}
else
{
if(vel[1][1]==' ')
{
vel[1][1]='o';
x=0;
j2=0;
}
}
}
}

if(vel[0][1]=='x' && vel[2][2]=='x')
{
if(x && j2)
{
if(vel[0][2]==' ')
{
vel[0][2]='o';
x=0;
j2=0;
}
else
{
if(vel[0][0]==' ')
{
vel[0][0]='o';
x=0;
j2=0;
}
}
}
}

if(vel[0][2]=='x' && vel[1][0]=='x')
{
if(x && j2)
{
if(vel[0][0]==' ')
{
vel[0][0]='o';
x=0;
j2=0;
}
else
{
if(vel[1][1]==' ')
{
vel[1][1]='o';
x=0;
j2=0;
}
}
}
}

if(vel[0][2]=='x' && vel[2][1]=='x')
{
if(x && j2)
{
if(vel[2][2]==' ')
{
vel[2][2]='o';
x=0;
j2=0;
}
else
{
if(vel[1][1]==' ')
{
vel[1][1]='o';
x=0;
j2=0;
}
}
}
}

if(x)
{
int d=0;
int f=0;

for(d=0; d<3; d++)
{
for(f=0; f<3; f++)
{
if(vel[d][f]==' ')
{
vel[d][f]='o';
x=0;
}
if(x==0) break;
}
if(x==0) break;
}

if(x)
{
printf("\nEMPATE.\n");
resetar();
}



}


}



int resetar()
{
int d, f;
for(d=0; d<3; d++)
{
for(f=0; f<3; f++)
{
vel[d][f]=' ';
}
}

}


int main() {
int t;

imprime();

j1=1;
j2=1;

do{

lerp();

system("cls");
imprime();
for(t=0; t<99000000; t++) ;
jogapc();
system("cls");
imprime();

if(vel[0][0]=='x' && vel[0][1]=='x' && vel[0][2]=='x' ||
vel[1][0]=='x' && vel[1][1]=='x' && vel[1][2]=='x' ||
vel[2][0]=='x' && vel[2][1]=='x' && vel[2][2]=='x' ||

vel[0][0]=='x' && vel[1][0]=='x' && vel[2][0]=='x' ||
vel[0][1]=='x' && vel[1][1]=='x' && vel[2][1]=='x' ||
vel[0][2]=='x' && vel[1][2]=='x' && vel[2][2]=='x' ||

vel[0][0]=='x' && vel[1][1]=='x' && vel[2][2]=='x' ||
vel[2][0]=='x' && vel[1][1]=='x' && vel[0][2]=='x') xwin();

if(vel[0][0]=='o' && vel[0][1]=='o' && vel[0][2]=='o' ||
vel[1][0]=='o' && vel[1][1]=='o' && vel[1][2]=='o' ||
vel[2][0]=='o' && vel[2][1]=='o' && vel[2][2]=='o' ||

vel[0][0]=='o' && vel[1][0]=='o' && vel[2][0]=='o' ||
vel[0][1]=='o' && vel[1][1]=='o' && vel[2][1]=='o' ||
vel[0][2]=='o' && vel[1][2]=='o' && vel[2][2]=='o' ||

vel[0][0]=='o' && vel[1][1]=='o' && vel[2][2]=='o' ||
vel[2][0]=='o' && vel[1][1]=='o' && vel[0][2]=='o') owin();
}while(1);

system("pause");

}
#include<stdio.h>

Postado
Tenho esse jogo da velha com um bug mas é bastante interessante, não é de minha autoria.

Puts que jogo grande... Jogo da velha não precisa ser tão grande assim não.

Postado

Eu tenho um que fiz para uma matéria de programação, é um jogo de sudoku que tem uma opção para resolver, agora para compilar é necessário ter o gtk+ instalado. Estão inclusos os arquivos de configuração do projeto para importá-lo para uma IDE. Eu usei o Eclipse CDT mas acho que qualquer IDE consegue importar projetos do Eclipse.

http://dl.dropbox.com/u/25139674/sudoku.zip

Postado
procurei no google onde baixar, fui no gtk+.org,

você tem outro link para eu baixar?

Você se refere ao gtk.org? Lá tem as instruções para baixar, se bem que no windows nem precisa montar nada é só rodar o executável que ele extrai a biblioteca toda para você...

Postado
Gostaria de saber se alguém consegue ou ja fez, algum "space invaders" em c, gostaria de estudar seus códigos...

Caso alguém não se lembre, esse aqui:

Ainda nao estou nesse nivel para criar, mas achei esse link com o código.

http://www.4shared.com/file/aGqbNuCf/Space_Invaders.html

encontrei nesse site: http://portaltec.org/remake-do-space-invaders-em-cc/

abraço!!!

com relação ao gtk+ vou parar de preguiça e vou ler direitinho no site.

dá erro dizendo que está faltando uma dll ....

nao estou em casa, quando chegar vou tentar.

valeu

Postado

Talvez não interesse a vocês mais um "provável ex amigo" e eu começamos o projeto de uma engine para criar jogos para o console em c++.

A engine não está pronta mas quase toda a parte de desenho esta pronta e funcional, um editor de imagens para a engine até foi feito usando a propria.

O tratamento do teclado também não está muito bom mais é funcional.

seja como for ela esta hospedada aqui http://code.google.com/p/console-game-engine/ na aba de downloads só á o editor para pegar o código da engine é necessário fazer o checkout.

Ela ficou meio abandonada depois que tive problemas com esse meu "provavel ex amigo" talvez um dia volte a mexer com ela "pra valer" novamente.

Bom fica ai se alguem estiver interessado.

Antes que me esqueça aqui tem uma breve documentação http://dl.dropbox.com/u/1227623/doc/index.html (é eu sei que preciso melhorar e muito o meu inglês).

Mais uma coisa atualmente ela só trabalha com o windows.

tinha muitos planos para ela mais não estou afim de trabalhar sozinho.

Imagens

Splash.jpg

http://dl.dropbox.com/u/1227623/Imagens/Console%20Game%20Engine/Splash.jpg

Editor.jpg

http://dl.dropbox.com/u/1227623/Imagens/Console%20Game%20Engine/Editor.jpg

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...