Tetris Clon C++ (första spel project)

Permalänk
Medlem

Tetris Clon C++ (första spel project)

Okej precis någorlunda klar med mitt första riktiga spelproject i C++ har gjort lite annat trams men inget specielt, det här var mycket svårare en vad jag någonsin hade skrivit förut Fick lite hjälp av min kompis dock som är riktigt grym i C++ ^^

I alla fall delar med mig av spelet samt koden, skulle vara snällt ifall någon kunde ta en titt på den och komentera ifall det finns bättre sätt att göra saker.

Samt jag vet ^^ den är inte dokumenterad alls ^^ ska se till att göra det när jag är mer klar med spelet ^^. Dålig ovana att alldrig göra det först ^^.

http://www.mugimugi.org/cpp/tetris2.rar (145KB)

I alla fall skrev det i C++ med LibSDL. Komentarer önskvärt

-----------------------------------------
Update: V3 här

http://www.mugimugi.org/cpp/tetris3.rar (165KB)

Så denna BORDE kompilera i Linux ^^ har dock ingen aning om hur man gör det, sorry inte så haj på den kompilatorn än, skulle vara trevligt ifall någon testade det.

Samt fixade lite saker, som t.es s knappen speedar hela upp, ner pil flyttar brickerna ner fortare, utskrivning av score samt hastighet samt nästa bricka

Hoppas den är mer intresant nu Önskar fortfarande komentarer

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Hedersmedlem

Orkade inte porta det till Linux så att jag kan prova, det hade säkert gått jättebra om du hade inkluderat SDL.h på rätt sätt och struntat i windows.h.

Men just nu orkar jag inte fixa till det.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0REc
Orkade inte porta det till Linux så att jag kan prova, det hade säkert gått jättebra om du hade inkluderat SDL.h på rätt sätt och struntat i windows.h.

Men just nu orkar jag inte fixa till det.

Jo jag vet, bara i main som behöver ändras samt 1 rad i game.cpp som kan igentligen tas bort men då äter den mer CPU ^^. I alla fall includera SDL.h på rätt sätt ???

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem

#include "SLD.h" om jag inte minns helt fel?

Visa signatur

Min svävare är full av ålar.

Permalänk
Medlem

#include <SDL/SDL.h> bör det vara för att vara platformsoberoende. Win32 development releasen är lite knasig tycker jag personligen då den har <SDL.h> rakt av. Sedan brukar jag köra med en egenkompilerad för att slippa dependency på msvcr71.dll.

Visa signatur

Teeworlds - För dig som gillar gulliga saker med stora vapen.

Permalänk
Medlem

Ummm jag använder mig av SDL/sdl.h så vist... men aja.

sen egenkompilerad ???

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem

Ja. Om du använde den DLL:en som dom levererar måste du skicka emd msvcr71.dll också. Däremot kan du tanka hem koden till SDL, ändra lite kompilator flaggor och vips så slipper man ha med denna bedrövliga DLL fil.

Visa signatur

Teeworlds - För dig som gillar gulliga saker med stora vapen.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av matricks
Ja. Om du använde den DLL:en som dom levererar måste du skicka emd msvcr71.dll också. Däremot kan du tanka hem koden till SDL, ändra lite kompilator flaggor och vips så slipper man ha med denna bedrövliga DLL fil.

Jo men då måste du alltid inkludera kåden o.s.v hela tiden, ganska jobbigt.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av MugiMugi
Jo men då måste du alltid inkludera kåden o.s.v hela tiden, ganska jobbigt.

Nä.. varför måste jag det?

Visa signatur

Teeworlds - För dig som gillar gulliga saker med stora vapen.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av MugiMugi
Ummm jag använder mig av SDL/sdl.h så vist... men aja.

sen egenkompilerad ???

Nej, du använder sdl/SDL.h.

#include <SDL/SDL.h>

is the shit.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Ett par stora buggar finns det ju.

1. Om man håller inne SPACE när klossen nåt botten kan man fortfarande flytta runt den och ny kloss kommer först när man släppt.

2. Är det jag som är dum, eller vad är det för knapp som man roterar klossarna med? Går det ens?

Visa signatur

must!

Permalänk
Medlem
Citat:

2. Är det jag som är dum, eller vad är det för knapp som man roterar klossarna med? Går det ens?

X!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av muiker
X!

Och Z!

Visa signatur

Vill du ha svar? Citera mig gärna.

Permalänk
Medlem

Det var rätt fint gjort
Men du borde göra så att nerpil(eller annan knapp) ökar hastigheten. Och ha med poängberäkning!

Visa signatur

Laptop: Zepto 6214W, Core Duo @ 2.0 GHz, 2048 MB RAM, 100 GB 7200 rpm
Server: Asus A7N8X Deluxe 2.0, Athlon XP 2500+ Barton, 2*Corsair 1024 MB, 200 GB Seagate, 3*320 GB WD3200 varav 2*RAID Edition

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av MugiMugi
Jo jag vet, bara i main som behöver ändras samt 1 rad i game.cpp som kan igentligen tas bort men då äter den mer CPU ^^. I alla fall includera SDL.h på rätt sätt ???

SDL_Delay(uint msec);

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0REc

Nej, du använder sdl/SDL.h.

#include <SDL/SDL.h>

is the shit.

OK, kan fixa det väldigt snabbt.

Citat:

Ursprungligen inskrivet av Hocce
Ett par stora buggar finns det ju.

1. Om man håller inne SPACE när klossen nåt botten kan man fortfarande flytta runt den och ny kloss kommer först när man släppt.

2. Är det jag som är dum, eller vad är det för knapp som man roterar klossarna med? Går det ens?

Första buggen är redan fixad, samt den andra ska jag fixa senare.

Citat:

Ursprungligen inskrivet av Legogris
Det var rätt fint gjort
Men du borde göra så att nerpil(eller annan knapp) ökar hastigheten. Och ha med poängberäkning!

Poäng beräkning finns redan ^^ dock har jag inte laggt till mitt font class än för att skriva ut det, men ska se till att fixa det.
Samt ska jag göra det med nerpilen

Citat:

Ursprungligen inskrivet av TechGuru

SDL_Delay(uint msec);

Tackar det där hjälper väldigt mycket slipa includera Windows.h på ett ställe fixar till så den borde kompileras i Linux ikväll.

Laddar upp den nya verisionen senare idag ^^ tack för alla komentarer.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem

testade i windows, funkade väl bra.... Nästa version ska bli intressant!
Fixa gärna så att man också ser vilken form nästa bit kommer att ha.... Och en pixel shader (hihi, needå)

Permalänk
Medlem

Sådär ny verision, med allt som jag sa att den skulle inehålla hoppas den är bättre en den föregånde vill fortfarande ha komentarer

FondLoder är en sak jag skrev för ett tag sedan så, includerade bara den här

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Hedersmedlem

Sedan tar du bort all användning av windows.h och vips kompilerar det på de flesta plattformar med SDL.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0REc
Sedan tar du bort all användning av windows.h och vips kompilerar det på de flesta plattformar med SDL.

Redan gjort, den kommer bara includera windows.h i win32 miljö, eftersom det inte finns något bra sätt att 'error' checka skiten. som t.ex. i unix, std::cerr blabla.

Btw laddade up en liten updaterad verision ser lite snyggare ut ^^, så tanka ner den igen ^^.

I alla fall all kod som är där nu är skrivet av mig så ^^ kanske inte så imponerande men men ^^.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Hedersmedlem

Den kompilerar inte. Väldigt mycket fel. Följ ANSI-C++ så kommer det gå bra, ska nog fixa det så kan jag visa en patch sen...

EDIT:
http://xevz.mine.nu/tetris3.patch

Det som fixades:
- Nya rader i slutet på alla .cpp och .h (inte obligatoriskt men GCC säger till om det så att lägga på det ger en snyggare kompileringsoutput)
- Lägga till

#include <stdexcept>

i Board.h
- Ändra

#include "board.h"

till

#include "Board.h"

i Board.cpp
- Ändra

text2->DrawString(itoa(score, tmp, 10),screen,(tetrisscreen+5),15,0); ... text2->DrawString(itoa(droprate, tmp, 10),screen,(tetrisscreen+5),55,0);

till

sprintf(tmp, "%d", screen); text2->DrawString(tmp, screen,(tetrisscreen+5),15,0); ... sprintf(tmp, "%d", droprate); text2->DrawString(tmp, screen,(tetrisscreen+5),55,0);

i Game.cpp

I övrigt så tycker jag att du skippar den där fontliben (den suger) och skriver en egen istället. Det är otroligt lätt, kan hjälpa dig om du vill.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0REc
I övrigt så tycker jag att du skippar den där fontliben (den suger) och skriver en egen istället. Det är otroligt lätt, kan hjälpa dig om du vill.

För övrigt så skrev jag den själv....

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Hedersmedlem

MugiMugi: Hmm, det har du nog rätt i, var inte den som finns på cplusplus.nu (även om den var ganska lik "outputmässigt"). Var helt säker på att du tog den från cplusplus.nu...
Aja, strunt samma.

Glömde bort att skriva hur man kompilerar det med GCC också, detta fungerar hos mig:

g++ -lSDL *.cpp -o tetris

annars är det bara att skriva upp alla .cpp filer istället för *.cpp med main.cpp sist.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Okej alla de changes är klara ^^ och verkar fungera bra, ska testa det på min BSD burk senare men måste instalera SDL på den. Samt bara tanka ner filen åvan igen för den verisionen.

Samt, hur ska man nu gå till väga för att få ihop ett bättre font bibliotek, vill hälst inte använda av någon annans.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Hedersmedlem

Du kan använda en bitmap med fonter...
Exempelvis denna: http://cone3d.gamedev.net/cone3d/gfxsdl/tut4-2.gif

Mycket lättare att editera.
Sedan några lätta funktioner:

#include <stdarg.h> ... void drawchar(int x, int y, char c) { SDL_Rect srect, drect; srect.x = (c % 16) * 16; srect.y = (c / 16) * 16; srect.w = 16; srect.h = 16; drect.x = x - 4; drect.y = y - 4; drect.w = 16; drect.h = 16; SDL_SetColorKey(font, SDL_SRCCOLORKEY, SDL_MapRGB(font->format, 0, 0, 0)); SDL_SetAlpha(font, SDL_SRCALPHA, 255); SDL_BlitSurface(font, &srect, SDL_GetVideoSurface(), &drect); } void drawstring(int x, int y, const char *text, ...) { char buffer[512]; char *p = buffer; va_list list; va_start(list, text); vsprintf(buffer, text, list); va_end(list); while (*p) { drawchar(x, y, *p); x += 8; p++; } }

För att skriva ut ett tecken:

drawchar(1, 1, 't');

För att skriva ut en sträng:

drawstring(1, 1, "Hejsan hoppsan");

Skriva ut en integer:

int i = 10; drawstring(1, 1, "Var: %d", i);

Det sista fick jag idéen från när jag glodde i källkoden till Fungus. Så det har jag matricks att tacka så mycket för, visste inte om stdargs.h innan.

Detta är då C-kod, om du skriver C++ använder du cstdargs istället för stdargs.c.
Väldigt smidigt sätt att skriva ut tecken måste jag säga.

font är en SDL_Surface* f ö. Där du har laddat in bitmappen...

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Okej ska ta en titt på det senare, vet att min är ganska snarligt endå ^^ dock så suportar min olika storlekar på fonten men aja kanske går att fixa till det där oxo.

I alla fall, fungerar i FreeBSD nu ^^ "g++ -I "/usr/local/include/" -L "/usr/local/lib" -lSDL -pthread *.cpp -o tetris" för att kompilera den :/ ganska jobbigt men det fungerade Så tackar för hjälpen.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Citat:

Ursprungligen inskrivet av m0REc
font är en SDL_Surface* f ö. Där du har laddat in bitmappen...

Är det inte lite fulkod över att använda globala variabler på det viset? Vad händer t.ex. om man vill kunna använda två olikqa typsnitt samtidigt?

Sen är jag inte så bra på C, vad änder om man kör drawstring(1,1,"Mer än 512 tecken"); ?

Visa signatur

Python-IRC på svenska: #python.se

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Sebastianj
Sen är jag inte så bra på C, vad änder om man kör drawstring(1,1,"Mer än 512 tecken"); ?

BAM!

Visa signatur

Teeworlds - För dig som gillar gulliga saker med stora vapen.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Sebastianj
Är det inte lite fulkod över att använda globala variabler på det viset? Vad händer t.ex. om man vill kunna använda två olikqa typsnitt samtidigt?

Sen är jag inte så bra på C, vad änder om man kör drawstring(1,1,"Mer än 512 tecken"); ?

Då är det väl bara att baka in den i funktionen istället.

Det fungerar inte så bra nej. Men det händer inte så ofta.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Bara att lägga in en t.ex

counter och ifall den är över 512 så hoppar den ur loopen, så kommer i alla fall inget crasha ^^

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.