Compilador
O software gerado por esse tutorial pode ser compilado a partir do Dev-C++ ou similares.Base do código
Digitar o códigoint main(void){
return 0;
}
E salvar como 'snake.cpp'
Desenhar caracteres na tela
Incluir#include<stdio.h>
no início do arquivo.Incluir
printf("%c",1);
dentro da função main.Se compilar e executar ainda não dá para ver nada porque o programa executa e fecha muito rápido.
Vamos por uma pausa:
#include<conio.h>
(depois da declaração da biblioteca stdio)getch();
(depois do printf)
Caracter posição meio da tela
Para desenhar no meio da tela é preciso incluir a biblioteca windows.hE antes do printf:
COORD p={10,10};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
Essa linha coloca o cursor na décima coluna da décima linhaEu acho que esse código que permite colocar texto no meio da tela merece ser difundido.
void mgotoxy(int x,int y){
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
O Código até aqui fica
#include<windows.h>
#include<stdio.h>
#include<conio.h>
void mgotoxy(int x,int y){
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
int main(void){
mgotoxy(7,7);
printf("%c",1);
getch();
return 0;
}
Paredes do jogo
Vamos declarar uma variavel int x e usar um 'for' para desenhar cada uma das quatro paredesint x;
for(x=0;x<18;x++){
mgotoxy(0,x);
printf("%c",219);
}
for(x=0;x<26;x++){
mgotoxy(x,0);
printf("%c",219);
}
for(x=0;x<18;x++){
mgotoxy(26,x);
printf("%c",219);
}
for(x=0;x<27;x++){
mgotoxy(x,18);
printf("%c",219);
}
Movimentando letras no prompt
for(x=2;x<26;x++){
mgotoxy(x-1,8);
printf(" ");
mgotoxy(x,8);
printf("%c",219);
Sleep(200);
}
Dirigindo o objeto
Vamos dar direção a esse ponto, de acordo com o tecladoVamos declarar uma variavel int 'direcao'
Se direcao==0 entao o ponto se move para a esquerda
Se direcao==1 entao o ponto se move para a cima
Se direcao==2 entao o ponto se move para a direita
Se direcao==3 entao o ponto se move para a baixo
vamos inicializar com 2
Vamos criar as variaveis int cx e cy que vão armazenar a coordenada do ponto
Vamos criar uma variavel char tecla
E vamos substituir aquele for por dois while. Na condição do segundo while vamos usar a função kbhit()
#include<windows.h>
#include<stdio.h>
#include<conio.h>
void mgotoxy(int x,int y){
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
int main(void){
int x,direcao=2,cx=0,cy=7;
char tecla='a';
for(x=0;x<18;x++){
mgotoxy(0,x);
printf("%c",219);
}
for(x=0;x<26;x++){
mgotoxy(x,0);
printf("%c",219);
}
for(x=0;x<18;x++){
mgotoxy(26,x);
printf("%c",219);
}
for(x=0;x<27;x++){
mgotoxy(x,18);
printf("%c",219);
}
while(tecla!='s'){
while(tecla!='s'&&!(tecla=kbhit())){
if(direcao==0)cx--;
if(direcao==1)cy--;
if(direcao==2)cx++;
if(direcao==3)cy++;
mgotoxy(cx,cy);
printf("%c",219);
Sleep(200);
if(cy==0||cy==18||cx==0||cx==26)tecla='s';
}
if(tecla!='s')tecla=getch();
if(tecla=='K')direcao=0;
if(tecla=='H')direcao=1;
if(tecla=='M')direcao=2;
if(tecla=='P')direcao=3;
if(cy==0||cy==18||cx==0||cx==26)tecla='s';
}
getch();
return 0;
}
Ralei um pouco pra achar e entender a função kbhit(). Agora disponibilizo aqui um exemplo de como utilizá-la. Ela é importante.
Apagar o rastro da cobra
Vamos transformar cx e cy em arrays, assim agente pinta o primeiro elemento e apaga o ultimo.Vamos criar uma variavel int tamanho que armazena o tamanho da cobra, pra podermos apagar o fim da cobra qdo ela andar
#include<windows.h>
#include<stdio.h>
#include<conio.h>
void mgotoxy(int x,int y){
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
int main(void){
int x,direcao=2,cx[300]={1,2},cy[300]={7,7},tamanho=1;
char tecla='a';
for(x=0;x<18;x++){
mgotoxy(0,x);
printf("%c",219);
}
for(x=0;x<26;x++){
mgotoxy(x,0);
printf("%c",219);
}
for(x=0;x<18;x++){
mgotoxy(26,x);
printf("%c",219);
}
for(x=0;x<27;x++){
mgotoxy(x,18);
printf("%c",219);
}
while(tecla!='s'){
while(tecla!='s'&&!(tecla=kbhit())){
for(x=tamanho;x>0;x--){
cx[x]=cx[x-1];
cy[x]=cy[x-1];
}
if(direcao==0)cx[0]--;
if(direcao==1)cy[0]--;
if(direcao==2)cx[0]++;
if(direcao==3)cy[0]++;
mgotoxy(cx[tamanho],cy[tamanho]);
printf(" ");
mgotoxy(cx[0],cy[0]);
printf("%c",219);
Sleep(200);
if(cy[0]==0||cy[0]==18||cx[0]==0||cx[0]==26)tecla='s';
}
if(tecla!='s')tecla=getch();
if(tecla=='K')direcao=0;
if(tecla=='H')direcao=1;
if(tecla=='M')direcao=2;
if(tecla=='P')direcao=3;
if(cy[0]==0||cy[0]==18||cx[0]==0||cx[0]==26)tecla='s';
}
getch();
return 0;
}
A maçã
Vamos declarar duas variaveis int macax e macay que armazenam a coordenada da maçã no planoÉ preciso incluir as bibliotecas iostream e a time.h
#include<time.h>
#include<iostream>
srand(time(NULL));
macax=(rand()%25)+1;
macay=(rand()%17)+1;
Para desenhar a maçã:
mgotoxy(macax,macay);
printf("%c",1);
Deglutindo
Quando a cobra passa sobre a maçã ela deve aumentar de tamanho e outra maçã deve ser geradaEntre as linhas que apagam o fim da cobra e as linhas que desenham a ponta, Digite:
if(macax==cx[0]&macay==cy[0]){
tamanho++;
macax=(rand()%25)+1;
macay=(rand()%17)+1;
}
Game Over
Só falta fazer o fim do jogo:Se a ponta da cobra estiver sobre ela mesma o jogo acaba
for(x=1;x<tamanho;x++){
if(cx[0]==cx[x]&cy[0]==cy[x])tecla='s';
}
Código Fonte
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
//#include<stdlib.h>
#include<iostream>
void mgotoxy(int x,int y){
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
int main(void){
int x,direcao=2,cx[300]={1,2},cy[300]={7,7},tamanho=1,macax,macay;
char tecla='a';
//system("MODE con cols=27 lines=20");
for(x=0;x<18;x++){
mgotoxy(0,x);
printf("%c",219);
}
for(x=0;x<26;x++){
mgotoxy(x,0);
printf("%c",219);
}
for(x=0;x<18;x++){
mgotoxy(26,x);
printf("%c",219);
}
for(x=0;x<27;x++){
mgotoxy(x,18);
printf("%c",219);
}
srand(time(NULL));
macax=(rand()%25)+1;
macay=(rand()%17)+1;
while(tecla!='s'){
while(tecla!='s'&&!(tecla=kbhit())){
for(x=tamanho;x>0;x--){
cx[x]=cx[x-1];
cy[x]=cy[x-1];
}
if(direcao==0)cx[0]--;
if(direcao==1)cy[0]--;
if(direcao==2)cx[0]++;
if(direcao==3)cy[0]++;
mgotoxy(cx[tamanho],cy[tamanho]);
printf(" ");
if(macax==cx[0]&macay==cy[0]){
tamanho++;
macax=(rand()%25)+1;
macay=(rand()%17)+1;
}
mgotoxy(cx[0],cy[0]);
printf("%c",219);
mgotoxy(macax,macay);
printf("%c",1);
Sleep(200);
for(x=1;x<tamanho;x++){
if(cx[0]==cx[x]&cy[0]==cy[x])tecla='s';
}
if(cy[0]==0||cy[0]==18||cx[0]==0||cx[0]==26)tecla='s';
}
if(tecla!='s')tecla=getch();
if(tecla=='K')direcao=0;
if(tecla=='H')direcao=1;
if(tecla=='M')direcao=2;
if(tecla=='P')direcao=3;
if(cy[0]==0||cy[0]==18||cx[0]==0||cx[0]==26)tecla='s';
}
getch();
return 0;
}