Ściana wstydu

18

Wiem, tutaj na forum wszyscy pasjonowaliśmy się programowaniem zanim zaczęliśmy raczkować, a nasz kod od początku był idealny (i nadal jest oczywiście!) :)

Tak na poważnie- ostatnio przeglądałem swoje stare szkolne prace, i moją uwagę zwrócił program na zaliczenie przedmiotu OOP. Przeglądając kod trochę się uśmiałem, a trochę najadłem wstydu sam przed sobą. Pomyślałem że warto się "obnażyć" i podzielić. Może ktoś też będzie chętny pokazać kwiatka jakiego udało mu się popełnić na początku swojej kariery?

Link

Uwaga, oczy mogą Wam krwawić!

Ps: Nie wiedziałem czy wstawić to jako kod w treść posta. Jeśli uważacie że tak byłoby lepiej to dajcie znać- jest w ogóle możliwość zawijania dłuższego tekstu?

5

Gamemode do gry GTA San Andreas Multiplayer, rok 2010.
Skrypt gry do serwera napisany w języku PAWN (coś podobnego do C). Wszystko w jednym pliku, ponad 18 tysięcy linijek. Nie miałem wtedy pojęcia, że w programowaniu istnieją klasy (choć broni mnie to, że PAWN nie było obiektowe).

5

Mój pierwszy babol, jakiego zrobiłam w podstawówce w LOGO, wymyślając sposób narysowania okręgu:

4
Aventus napisał(a):

Link

Uwaga, oczy mogą Wam krwawić!

import.java już w drugiej linijce, faktycznie obciach, nie ma co czytać dalej.

1

Te wycinki kodu potwierdzają tylko regułę, że nawet początkowy programista napisze mniej gówniany kod od stada programistów w monolicie, gdzie nie ma wykonanej analizy przed wysłaniem ticketa do programisty :D

12

Znalazłam coś pisanego w Amiga Basicu (bez kolorowania składni). Całość ma prawie 1000 linii, ale wrzucam tylko jeden podprogram dla zobrazowania:

mysz4:
GOSUB mysz0
IF y=22 AND x>53 THEN siup=1
IF y=22 AND x>31 AND x<50 THEN usun=1
IF y=22 AND x<28 THEN Tekst=1
IF y=19 AND x>53 THEN katalog=1
IF y=19 AND x<28 THEN przeglad=1
IF y=7  AND x<40 THEN WINDOW 3,,(36,46)-(299,46),0:INPUT cosik$:WINDOW CLOSE 3
IF cosik$<>"" THEN nazwa$=LEFT$(cosik$,32):nrpl=0: LOCATE 7,6:Otwarcie=1:PRINT "                                "
cosik$=""
IF y=7  AND x>40 THEN  IF strt$="   " THEN strt$="Tak" ELSE strt$="   "
cosik$="-1"
IF y=11  AND x>40 THEN WINDOW 3,,(563,78)-(596,78),0:INPUT cosik$:WINDOW CLOSE 3
cosik=VAL(cosik$):IF cosik>0 AND cosik<100 THEN lk=cosik
cosik$="-1"
IF y=13  AND x>40 THEN WINDOW 3,,(563,94)-(596,94),0:INPUT cosik$:WINDOW CLOSE 3
cosik=VAL(cosik$):IF cosik>0 AND cosik<100 THEN op=cosik
cosik$="-1"
IF y=15  AND x<70 AND x>64 THEN WINDOW 3,,(507,110)-(539,110),0:INPUT cosik$:WINDOW CLOSE 3
cosik=VAL(cosik$):IF cosik>0 AND cosik<1000 THEN odst=cosik
cosik$="-1"
IF y=15 AND x<76 AND x>70 THEN WINDOW 3,,(563,110)-(596,110),0:INPUT cosik$:WINDOW CLOSE 3
cosik=VAL(cosik$):IF cosik>0 AND cosik<1000 THEN dost=cosik
cosik$=""
IF odst>dost THEN dost=odst
czyklik=2
RETURN:

Jakże ja swego czasu byłam dumna z tego programu i jego pięciu poziomów zagnieżdżeń.

W całym kodzie nie ma ani jednego komentarza, bo komentarze są dla cieniasów, ich pisanie zajmuje czas, a przecież i tak widać, co pogram robi.
W kodzie jest już trochę wcięć, ale traktuję je tu ciągle jako nowinkę i i nie wszędzie umieszczam.

Polecam opisowe nazwy zmiennych, typu:

siup, lk, cosik, dost

Program zawiera 29 skoków GOTO, niemniej jest też po części strukturalny, zawierając skoki do kilkudziesięciu podprogramów. Wysoce opisowe etykiety tych podprogramów również polecam łaskawej uwadze szacownego gremium:

blad: destrukcja: dnazwa: enddnazwa: glowka: katalog: koniec: korekta: licznik: mozna: mysz: mysz0: mysz2: mysz4: mysz6: mysz8: mysz10: mysz12: naglowek: najpierw: nast: numer: odstep: Otwarcie: pa: petla: ponico: prockont: przeglad: stopka: strona: Tekst: tu: UsunPlik: wis: wydruk: wyk: wywolanie: zawieszenie:

Boże, jaka ja byłam kiedyś dumna z tego programu :) W życiu nie przypuszczałabym wtedy, że kiedykolwiek pokażę go komuś jako coś innego niż powód do dumy :)

8

Niestety, z C64 Basic nic się mojego nie uchowało, więc pozostaje mi pochwalić się licealnym projektem, pisanym w Turbo Pascal, z podręcznikiem na kolanach. Około 3 miesięcy no-lajfizmu mnie kosztował w czasie wolnym po szkole. Na projekt składa się 17 plików .PAS, nie licząc konfiguracji hardware. Była to strategiczna turówka, z animacjami nawet, melodiami, obrazkami i innymi bajerami z których byłem wtedy dumny :)

Tutaj jest cały kod, rok 2003. Może komuś uda się to skompilować jakimś cudem ;p

Poniżej deklaracja zmiennych w pliku startowym. Całości tu nie wkleję, z oczywistych powodów, ale na szczególną uwagę zasługuje przemyślane nazewnictwo zmiennych i format kodu ;p

program MiK;
uses crt;

var ys:integer;
    nazwisko1:array [0..11] of char;     {nazwisko 1 gacza}
    nazwisko2:array [0..11] of char;     {nazwisko 2 gracza}
    na:word;
    xnazw: word;
    znazw,znazwf,wro: longint;
    amenug:char;                  {zm menu glownego}
    zmmg:char;
    nazwy:word;
    nazwyy:word;
    ym,xm:integer;                {zm punktow art}
    x,y,przyciski:word;           {zm.myszy}
    gracz:word;                   {nr gracza}
    kolor1,kolor2,kolor3,kolora,kolorb:word;         {kolor graczy}
    kolory:array [1..18] of word;
    zmiana:byte;                  {nowa tura?}
    xxx,yyy:integer;               {+wsp.miast}
    naleznosc:array [1..18] of word;     { naleznosc pol}
    miesiac:longint;               {miesiac}
    miesia:string;
    warunki,przyrost:byte;                  {warunki,przyrost}
    zlm:array[1..18] of longint;            {zloto miasta}
    zym:array[1..18] of longint;            {zywnosc miasta}
    drm:array[1..18] of longint;            {drewno miasta}
    pom:array[1..18] of longint;            {populacja miasta}
    zld:array[1..18] of longint;            {zloto miasta}
    zyd:array[1..18] of longint;            {zywnosc miasta}
    drd:array[1..18] of longint;            {drewno miasta}
    pod:array[1..18] of longint;
    ludzie1,ludzie2:longint;                    {populacja graczy}
    zloto1,zloto2:longint;                      {zloto gr.}
    drewno1,drewno2:longint;                    {drewno gr.}
    zywnosc1,zywnosc2:longint;                  {zywnosc gr.}
    podatek,rozpoczeta,powrot:word;         {petle,wmiasto}
    zywn1,zywn2,zlot1,zlot2,ludz1,ludz2,drewn1,drewn2:string;  {z,d,z,l-ogolnie}
    zl,zy,dr,po:array [1..18] of string;           {z,d,z,l-string}
    fort,targ,mlyn,tartak,ratusz:array[1..18] of word;        {budynki+-}
    armiam:array[1..18] of longint;                             {armie}
    wojaa1,wojab1,wojaa2,wojab2:longint;        {licz.armii mob.}
    woaa1,woab1,woaa2,woab2:string;             {licz.armii mob.string}
    armiams:array[1..18] of string;
    nowaa:longint;
    nowaab:string;
    wmiasto:longint;                                          {armie}
    a1,b1,a2,b2:word;
    xa1,ya1,xb1,yb1:integer;                         {xy arm}
    xa2,ya2,xb2,yb2:integer;
    armieeee,arm,zmienna:word;
    armiasta:longint;
    armiastas:string;
    rucha1,ruchb1,rucha2,ruchb2:word;
    miasto:word;
    arm1,arm2,arm3,arm4:string;
    zwyciestwo:word;
    w1,w2,odwrot,n1,n2:word;
    xx,yy:integer;
(...)
3
maszrum napisał(a):

Nie miałem wtedy pojęcia, że w programowaniu istnieją klasy (choć broni mnie to, że PAWN nie było obiektowe).

Hold my beer. Ja nie miałem pojęcia, że istnieją funkcje! Tak, na początku myślałem, że kod trzeba wykonuje się "od góry do dołu". I było to C++. Myślałem, że trudność w programowaniu polega na umiejętnym doborze list zmiennych podstawowych typów oraz żonglowaniu forem i while-m
Funkcje weszły w wersji 2. Klasy w wersji 3.

Poniżej filmik przedstawiający rezultat. Uwaga: gra 18+.
https://streamable.com/0t6v44

4

Kiedyś w czasach Atari miałem grę na cartridgu i przebłysk geniuszu. Przegram grę z cartridga na kasetę!

Idea była prosta:
1) Odczytać zwartość segmentu pamięci, na który zamapowany był cartridge (PEEK)
2) Przerobić na KOD w BASICU
3) Nagrać kod na kasetę
4) Odpiąć cartridge, załadować z kasety i viola!

Kod wyglądał mniej więcej tak:

1 POKE adres, wartosc
2 POKE adres+1, wartosc
...

A metodyka pracy tak:

PEEK(adres)

Następnie dopisanie kolejnej linii kodu. Przejście do adres+1.

Prace szły powoli (instrukcja FOR nie wydawała mi się wówczas interesująca)... i do momentu, w którym program w BASICu zrobił się większy niż dostępna pamięć ;)

Żeby było bardziej niezręcznie, to taki cartridge wkładałem po zbootwaniu Atari (co wiązało się z naruszeniem typowej sekwencji: wyłączyć sprzęt, włożyć cartridge, włączyć).
Prawdopodobnie odczytywałem jakieś śmieci i nie miało to prawa działać ;)

4

Gra, "symulator" giełdy, którą napisałem ~20 lat temu w QBASIC-u:

menu12:
LINE (20, 70)-(450, 400), 10, BF
COLOR 15
LOCATE 7, 5: PRINT "AGORA S.A", kurs1%; "zˆ Ilo˜†:"; ilosc1&
LOCATE 8, 5: PRINT "D¨BICA", kurs2%; "zˆ Ilo˜†:"; ilosc2&
LOCATE 9, 5: PRINT "ELEKTRIM", kurs3%; "zˆ Ilo˜†:"; ilosc3&
LOCATE 10, 5: PRINT "NETIA", kurs4%; "zˆ Ilo˜†:"; ilosc4&
LOCATE 11, 5: PRINT "OPTIMUS", kurs5%; "zˆ Ilo˜†:"; ilosc5&
LOCATE 12, 5: PRINT "PKN ORLEN", kurs6%; "zˆ Ilo˜†:"; ilosc6&
LOCATE 13, 5: PRINT "STOMIL", kurs7%; "zˆ Ilo˜†:"; ilosc7&
LOCATE 14, 5: PRINT "TPSA", kurs8%; "zˆ Ilo˜†:"; ilosc8&
LOCATE 15, 5: PRINT "WARTA", kurs9%; "zˆ Ilo˜†:"; ilosc9&
LOCATE 16, 5: PRINT "½YWIEC", kurs10%; "zˆ Ilo˜†:"; ilosc10&
LOCATE 18, 5: PRINT "DOLAR US", kurs11; "zˆ Ilo˜†"; ilosc11&
COLOR 4
LOCATE 19, 5: PRINT "EURO", kurs12; "zˆ Ilo˜†"; ilosc12&
COLOR 15
LOCATE 20, 5: PRINT "MARKA NM", kurs13; "zˆ Ilo˜†"; ilosc13&
LOCATE 21, 5: PRINT "FUNT  AN", kurs14; "zˆ ilo˜†"; ilosc14&
'atu printy do walut

DO
a$ = INKEY$
IF a$ = CHR$(0) + CHR$(80) THEN GOTO menu13
IF a$ = CHR$(0) + CHR$(72) THEN GOTO menu11
IF a$ = "+" AND kasa > 0 + (kurs12 * ilosctrans) THEN ilosc12& = ilosc12& + ilosctrans: kasa = kasa - (kurs12 * ilosctrans): LOCATE 3, 50: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu12
IF a$ = "-" AND ilosc12& >= 0 + ilosctrans AND ilosc12& <> 0 THEN ilosc12& = ilosc12& - ilosctrans: kasa = kasa + (kurs12 * ilosctrans): LOCATE 3, 50: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu12
IF a$ = CHR$(13) THEN GOTO zapistra:
LOOP

I teraz te menu13, menu11 i pozostałe to oczywiście dokładnie to samo, ale w linijce 26 jest ilosc11, kurs11, albo ilosc13, kurs13 i tak dalej. Takich etykiet było bodaj 14. Ale przecież gra miała się rozwijać, prawda? Będzie więcej rzeczy do kupienia!

Wersja parę miesięcy później (komentarze poza "i tak dalej" oryginalne):

IF a$ = CHR$(0) + CHR$(80) THEN menu = menu + 1: GOTO menu2
IF menu > 47 THEN menu = 1: GOTO menu2
IF a$ = CHR$(0) + CHR$(72) THEN menu = menu - 1: GOTO menu2
IF menu < 1 THEN menu = 47: GOTO menu2
IF a$ = "+" AND menu = 1 AND kasa > 0 + (kurs1% * ilosctrans) THEN ilosc1 = ilosc1 + ilosctrans: kasa = kasa - (kurs1% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
IF a$ = "+" AND menu = 2 AND kasa > 0 + (kurs2% * ilosctrans) THEN ilosc2 = ilosc2 + ilosctrans: kasa = kasa - (kurs2% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
IF a$ = "+" AND menu = 3 AND kasa > 0 + (kurs3% * ilosctrans) THEN ilosc3 = ilosc3 + ilosctrans: kasa = kasa - (kurs3% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
IF a$ = "+" AND menu = 4 AND kasa > 0 + (kurs4% * ilosctrans) THEN ilosc4 = ilosc4 + ilosctrans: kasa = kasa - (kurs4% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
'......... i tak dalej ........
IF a$ = "+" AND menu = 47 AND kasa > 0 + (kurs47% * ilosctrans) THEN ilosc47 = ilosc47 + ilosctrans: kasa = kasa - (kurs47% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2

IF a$ = "-" AND menu = 1 AND ilosc1 <> 0 THEN ilosc1 = ilosc1 - ilosctrans: kasa = kasa + (kurs1% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
'......... i tak dalej ........
IF a$ = "-" AND menu = 44 AND ilosc44 <> 0 THEN ilosc44 = ilosc44 - ilosctrans: kasa = kasa + (kurs44% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
IF a$ = "-" AND menu = 45 AND ilosc45 <> 0 THEN ilosc45 = ilosc45 - ilosctrans: kasa = kasa + (kurs45% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
IF a$ = "-" AND menu = 46 AND ilosc46 <> 0 THEN ilosc46 = ilosc46 - ilosctrans: kasa = kasa + (kurs46% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
IF a$ = "-" AND menu = 47 AND ilosc47 <> 0 THEN ilosc47 = ilosc47 - ilosctrans: kasa = kasa + (kurs47% * ilosctrans): LOCATE 4, 58: PRINT "Stan konta:"; kasa; "zˆ": GOTO menu2
IF a$ = CHR$(13) THEN GOTO notowania 'nie bedzie tego zapisywal, tylko mial w pamieci
LOOP

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0