Chciałbym się pochwalić moim pierwszym programem napisanym w c++ od podstaw samemu.
Jest to prosta gra konsolowa typu snake z możliwością zmieniania wielkości mapy.
Poniżej pełen kod programu:
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <string>
#include <time.h>
using namespace std;
void gotoxy(int xx, int yy);//zmiana polozenia kursora
void rysowanie(int x, int y, char z);//rysowanie mapy z=char z jakiego zbudowana jest mapa
void game_over();
void menu();
void gameplay();
int x=7, y=8;//pozycja kursora
char snake=219, mapa=219, jablko=176;//wyglad weza
int predkosc=200, predkosc_=3;
int przycisk, kierunek=0;
int mapa_x=15, mapa_y=15;//wielkosc mapyc
int jablko_x=999, jablko_y=999;
int punkty=0, najlepszy_wynik=0;
int koniec_gry=0;
int main()
{
for(;;){
menu();
rysowanie(mapa_x, mapa_y, mapa);
if (najlepszy_wynik!=0){
gotoxy(mapa_x*2+5,2); cout<<"Best Points: "<<najlepszy_wynik-1;
}
gameplay();
//jezeli przegrasz
if (koniec_gry==1) {
game_over();
koniec_gry=0;
}
}//for g³owna petla
}//koniec programu
void rysowanie(int x, int y, char z)//rysowanie mapy
{
//rysowanie mapy
for (int i=0; i<x*2+3; i++){
//gorna krawedz
gotoxy(i,1);
cout << z;
//dolna krawedz
gotoxy(i,y+2);
cout << z;
}
for (int i=1; i<y+3; i++){
//lewa krawedz
gotoxy(1,i);
cout << z<<z;
//prawa krawedz
gotoxy(x*2+3,i);
cout << z<<z;
}
}
void gotoxy(int xx, int yy)//zmiana polozenia kursora
{
COORD c;
c.X = xx-1;
c.Y = yy-1;
SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), c);
}
void game_over()
{
system("cls");
if (najlepszy_wynik<punkty) najlepszy_wynik=punkty;
cout <<"GAME OVER"<<endl<<"You have scored "<<punkty-1<<" points"<<endl<<"Press Anything to Continue";
getch();
}
void menu()
{
system("cls");
int menu=0;
cout<<"START GAME"<<endl;
cout<<"OPTIONS"<<endl;
cout<<"QUIT GAME"<<endl;
while (menu!=10){
if (menu==0){
gotoxy(15,2);
cout<<" ";
gotoxy(15,3);
cout<<" ";
gotoxy(15,1);
cout<<"<---";
}
else if (menu==1){
gotoxy(15,1);
cout<<" ";
gotoxy(15,3);
cout<<" ";
gotoxy(15,2);
cout<<"<---";
}
else if (menu==2){
gotoxy(15,2);
cout<<" ";
gotoxy(15,1);
cout<<" ";
gotoxy(15,3);
cout<<"<---";
}
przycisk = getch();
switch(przycisk){
case 0:{
//gora
case 72: if (menu!=0) menu=menu-1; break;
//dol
case 80: if (menu!=2) menu=menu+1; break;
//enter
case 13:{
if (menu==0){//jeżeli wskaznik menu jest na pierwszej pozycji i nacisniesz enter zakonczy sie petla i program zacznie gre
menu=10;
}
if (menu==1){//opcje
do {
system("cls");
cout<<"Width of the map (minimum: 10, maximum: 50): ";
cin>>mapa_x;
}while ((mapa_x<10)||(mapa_x>50));
do {
system("cls");
cout<<"Height of the map (minimum: 10, maximum: 50): ";
cin>>mapa_y;
}while ((mapa_y<10)||(mapa_y>50));
do {
system("cls");
cout<<"Speed (minimum: 1, maximum: 6, default: 3): ";
cin>>predkosc_;
}while ((predkosc_<1)||(predkosc_>6));
system("cls");
menu=0;
cout<<"START GAME"<<endl;
cout<<"OPTIONS"<<endl;
cout<<"QUIT GAME"<<endl;
}
if (menu==2){
exit(0);
}
}break;//case 13 enter
}break;//case 0
default: break;
}//switch
}//while
system("cls");
}
void gameplay()
{
int blokuj_ruch;
int powtorz_losowanie;
int rejestr[1000][2];
x=3; y=3;
jablko_x=999; jablko_y=999;
punkty=1;
kierunek=0;
//predkosc
if (predkosc_==6) predkosc=50;
else if (predkosc_==5) predkosc=100;
else if (predkosc_==4) predkosc=150;
else if (predkosc_==3) predkosc=200;
else if (predkosc_==2) predkosc=250;
else if (predkosc_==1) predkosc=300;
while(koniec_gry==0){//Petla gry
blokuj_ruch=0;
while (kbhit()){//pobranie przycisku
switch(getch()){
case 0:{
case 77: if ((kierunek!=1)&&(blokuj_ruch==0)) {kierunek=0; blokuj_ruch=1;} break;//prawo
case 75: if ((kierunek!=0)&&(blokuj_ruch==0)) {kierunek=1; blokuj_ruch=1;} break;//lewo
case 72: if ((kierunek!=3)&&(blokuj_ruch==0)) {kierunek=2; blokuj_ruch=1;} break;//gora
case 80: if ((kierunek!=2)&&(blokuj_ruch==0)) {kierunek=3; blokuj_ruch=1;} break;//dol
}break;
}//switch
}//if (kbhit())
switch(kierunek){
case 0: x=x+2; break;//prawo
case 1: x=x-2; break;//lewo
case 2: y=y-1; break;//gora
case 3: y=y+1; break;//dol
}
for (int i=punkty; i>0; i--)//rejestr wspolrzednych ogona
{
rejestr[i][0]=rejestr[i-1][0];
rejestr[i][1]=rejestr[i-1][1];
if ((x==rejestr[i][0])&&(y==rejestr[i][1]))
koniec_gry=1;//jezeli dotkniesz ogona przegrywasz
}
if ((x<2)||(x>mapa_x*2+1)||(y<2)||(y>mapa_y+1))//jezeli waz dotknie krawedzi mapy
koniec_gry=1;
gotoxy(x,y);
cout<<snake<<snake;//rysowanie snake
rejestr[0][0]=x;
rejestr[0][1]=y;
gotoxy(rejestr[punkty][0], rejestr[punkty][1]);
cout<<" ";//usuwanie ogona
gotoxy(1,1);//przesuniecie kursora w lewy gorny rog
// jablka w losowych miejscach
if ((jablko_x==999)&&(jablko_y==999)){
do{
powtorz_losowanie=0;
srand(time(NULL));
jablko_x=rand()%(mapa_x*2-4)+3;
jablko_y=rand()%(mapa_y-2)+2;
if (jablko_x%2==0) jablko_x++;
for (int i=punkty; i>=0; i--){
if ((jablko_x==rejestr[i][0])&&(jablko_y==rejestr[i][1]))
powtorz_losowanie=1;
}
}while (powtorz_losowanie==1);
gotoxy(jablko_x, jablko_y);
cout<<jablko<<jablko;
}
if ((jablko_x==x)&(jablko_y==y)){
punkty++;
jablko_x=999; jablko_y=999;
gotoxy(mapa_x*2+5,1); cout<<"Points: "<<punkty-1;
}
Sleep(predkosc);
}//while petla gry
}
#c++
@kq: jeszcze z 10 lat temu jak to czytałem to mi się podobała. Dzisiaj jest przestarzała choć naprawdę ciekawa.
Chciałbym się pochwalić moim pierwszym programem napisanym w c++ od podstaw samemu....
Chciałbym się pochwalić moim pierwszym programem napisanym w c++ od podstaw samemu....
Chciałbym się pochwalić moim pierwszym programem napisanym w c++ od podstaw samemu....
Chciałbym się pochwalić moim pierwszym programem napisanym w c++ od podstaw samemu....
Chciałbym się pochwalić moim pierwszym programem napisanym w c++ od podstaw samemu....
Chciałbym się pochwalić moim pierwszym programem napisanym w c++ od podstaw samemu....
@grzesiek51114: @kq: A co myślicie o książce "Thinking in C++"?