| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: [leicht bis mittel-schwer] Game Of Life im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Genial! Sehr interessantes Spiel Hab mal eine Javascript+HTML Lösung gebastelt: Klick = Zelle setzen Doppelklick = Zelle entfernen...
![]() |
| | #16 (permalink) |
| Registriert seit: 17.07.10 ![]() Likes: 0 | Genial! Sehr interessantes Spiel Hab mal eine Javascript+HTML Lösung gebastelt: Klick = Zelle setzen Doppelklick = Zelle entfernen |
| | |
| | #17 (permalink) |
| habe meine Version mal überarbeitet und SDL mit reingepackt ... aber der Aufwand SDL zu installieren ist 10x größer als der Nutzen :o Code
__________________ WYSIWYG | |
| | |
| | #18 (permalink) |
| Ne Lösung zur Aufgabe "Einfach" mit zufälligem Startwert statt festprogrammiertem hab ich mal vor einiger Zeit in einem Anflug von Langeweile und fehlendem Internet umgesetzt, das poste ich hier der Vollständigkeit halber mal. Ausgabe ist auf ner Konsole (mithilfe von `clear`). In PHP: http://github.com/raphaelm/conwaycli...gameoflife.php In Python: http://github.com/raphaelm/conwaycli.../gameoflife.py
__________________ | |
| | |
| | #19 (permalink) |
| Registriert seit: 08.07.11 ![]() Likes: 0 | Hallo, hier kommt meine Lösung für das Lebensspiel ![]() ich habe die Grafikschnittstelle allegro für die grafische ausgabe verwendet. Code: //---Lebens-Simulations PROGRAMM---
/**********************************
wenn allegro verwendet wird muss zusätzlich zu "g++ DATEINAME.CPP"
noch " `allegro-config --cflags` `allegro-config --libs` angegeben werden
die Zeile im terminal sieht dan so aus:
" g++ main.cpp `allegro-config --cflags` `allegro-config --libs` "
ein dynamischer zellhaufen der in einer welt von 800 mal 600 pixel vor sich hin
vegetiert.
Die Zellen werden für die Ausgangssituation zufällig auf einem feld von 400 * 300
Pixel verteilt, welches sich in der mitte der "welt" befindet.
**********************************/
#include <allegro.h> //include-datei für die allegrofunktionen
short cell[800][600];
short temp[800][600];
short x, y, m, a, b, cnt;
long int zykl;
int main()
{
allegro_init(); //initialisiert allegro
install_keyboard(); //teilt mit dass die tastatur verwendet wird
set_color_depth(16); //stellt die farbtiefe ein -> hier auf 16bit
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0); //stellt die bildschirmauflösung auf 800x600 pixel
set_window_title("Digital Life");
show_os_cursor(MOUSE_CURSOR_ARROW);
BITMAP *welt;
welt = create_bitmap(800, 600);
reset:;
//Initialisierung der Zellen
for(int i=0; i < 800; i++)
{
for(int j=0; j < 600; j++) cell[i][j] = 0;
}
//Verteilung der Lebenden Zellen
srand( time(NULL) );
m = 1000 * (rand()%100 + 1);
a = 0;
for(int i = 0; i < m; i++)
{
x = rand()%400 + 200;
y = rand()%300 + 150;
if(cell[x][y]==0) a++; //Zählt wieviel Zellen verteilt werden
cell[x][y] = 1;
}
b = a;
zykl = 0;
while(!key[KEY_ESC])
{
while( key[KEY_SPACE] ); //Pause solange Leertaste gedrückt
if( key[KEY_R] ) goto reset; //Neustart wenn r gedrückt
clear_to_color( welt, makecol(173,230,216) ); //Hintergrundfarbe
textprintf_ex( welt, font, 5, 15, makecol(255,0,0), -1, "Digital Life - Lebenssimulator (C) 2011 Lukas");
textprintf_ex( welt, font, 5, 35, makecol(255,0,0), -1, "Zellen zu Beginn: %d Zellen momentan: %d", a, b );
textprintf_ex( welt, font, 5, 45, makecol(255,0,0), -1, "Bisher berechnete Zyklen: %ld", zykl );
textprintf_ex( welt, font, 5, 55, makecol(255,0,0), -1, "Unterbrechen: LEERTASTE, Neustart: R, Beenden: ESC");
b = 0; //Zähler für aktuelle Zellenanzahl zurücksetzen
zykl++; //Zykluszähler erhöhen
//Regeln für fortbestand/tod/entstehung der zellen
for(int i = 1; i < 799; i++)
{
for(int j = 1; j < 599; j++)
{
cnt = 0;
if( cell[i-1][j-1] == 1 ) cnt++;
if( cell[i-1][j] == 1 ) cnt++;
if( cell[i-1][j+1] == 1 ) cnt++;
if( cell[i][j-1] == 1 ) cnt++;
if( cell[i][j+1] == 1 ) cnt++;
if( cell[i+1][j-1] == 1 ) cnt++;
if( cell[i+1][j] == 1 ) cnt++;
if( cell[i+1][j+1] == 1 ) cnt++;
if( cnt < 2 ) temp[i][j] = 0;
if( (cnt == 2)&&(cell[i][j] > 0) ) temp[i][j] = 1;
if( cnt == 3 ) temp[i][j] = 1;
if( cnt > 3 ) temp[i][j] = 0;
}
}
//übergabe der neuen zellpositionen
for(int i = 0; i < 800; i++)
{
for(int j = 0; j < 600; j++) cell[i][j] = temp[i][j];
}
//ausgabe der zellpositionen
for(int i = 0; i < 800; i++)
{
for(int j = 0; j < 600; j++)
{
switch( cell[i][j] )
{
case 0: {break;}
case 1: {putpixel( welt, i, j, makecol(85,107,47) ); b++; break;}
default: {textprintf_ex( screen, font, 30, 200, makecol(255,0,0), makecol(0,0,255), "ERROR");
while( !key[KEY_ESC] ); break;}
}
}
}
draw_sprite(screen, welt, 0, 0); //ausgabe der "welt" an den Bildschirm
}
destroy_bitmap(welt); //Die "welt" wieder freigeben
return 0;
}
END_OF_MAIN(); //schliesst die allegro anwendung wieder sollte aber genau so auch überall anders wo allegro installiert ist compilierbar sein. lg lukas, BTW: hallo an euch alle!! (erster post) Geändert von CDW (08.07.11 um 18:56 Uhr) Grund: [CODE] Tags sind schöner als [QUOTE] Tags |
| | |
| | #20 (permalink) |
| Registriert seit: 12.04.09 ![]() Likes: 2 | hier meine implementation in 5 Zeilen C-code: Code: # define B f[a]
char f[2][26][82],i,j,a=0,c[]="_o",n;main(){B[3][3]=B[3][2]=B[3][1]=B[2][3]=B[1][2]=1;for
(;;){system("clear");for(i=1;i< 25;i++){for(j=1; j<81;j++){printf("%c",c[f[!a][i][j]]);n=B
[i-1][j-1]+B[i-1][j]+B[i-1][j+1]+B[i][j-1]+B[i][j+1]+B[i+1][j-1]+B[i+1][j]+B[i+1][j+1];f[!
a][i][j]=(!B[i][j]&&n==3) ||(B[i][j]&&n>1&&n<4);}puts("");}sleep(1);a=!a;}}
__________________ Code: # define B f[a]
char f[2][26][82],i,j,a=0,c[]="_o",n;main(){B[3][3]=B[3][2]=B[3][1]=B[2][3]=B[1][2]=1;for
(;;){system("clear");for(i=1;i< 25;i++){for(j=1; j<81;j++){printf("%c",c[f[!a][i][j]]);n=B
[i-1][j-1]+B[i-1][j]+B[i-1][j+1]+B[i][j-1]+B[i][j+1]+B[i+1][j-1]+B[i+1][j]+B[i+1][j+1];f[!
a][i][j]=(!B[i][j]&&n==3) ||(B[i][j]&&n>1&&n<4);}puts("");}sleep(1);a=!a;}} |
| | |
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |