Wątek przeniesiony 2018-09-20 19:32 z Java przez Shalom.

Kółko i Krzyżyk oraz Papier, kamień i nożyce – ocena kodu dwóch prostych gier

0

Jest to mój pierwszy wpis na forum więc na wstępie witam wszystkich.

Od jakiegoś czasu uczę się programowania w Javie. Wyskrobałem dwie małe gierki, kółko i krzyżyk oraz papier kamień nożyce i prosiłbym abyście ocenili działanie tych gierek oraz sam kod.
Link : https://megawrzuta.pl/download/92f3c49ceeb24b4d0414ed5f7d7110f3.html
w folderach z grami znajduje się również kod.

2

Hej,
zajrzałem do Kółka i Krzyżyk, kiedyś pisałem (w czym ja to pisałem ??), chyba w VBA :) działa OK, ale okienko mi się dość male skaluje, zastanawiam się czy zależy to od SO czy nie, jeżeli nie, to ja bym zwiększył ze dwa razy, co najmniej. Co do gierki, to pomyśl nad jakąś wersją z komputerem, bo samemu z sobą ciężko się gra :) I najlepiej wymyślić taki algorytm (to nie takie proste), aby czasem dało się z komputerem wygrać :) Co do kodu, to nie przyglądałem się dokładnie, ale np. funkcję:

void ustawObrazek()
    {
        if (wartoscPola[0] + wartoscPola[1] + wartoscPola[2] == 3)
         {
             pole[0].setIcon(new ImageIcon("X-.gif"));
             pole[1].setIcon(new ImageIcon("X-.gif"));
             pole[2].setIcon(new ImageIcon("X-.gif"));
         }
        else if (wartoscPola[3] + wartoscPola[4] + wartoscPola[5] == 3)
         {
             pole[3].setIcon(new ImageIcon("X-.gif"));
             pole[4].setIcon(new ImageIcon("X-.gif"));
             pole[5].setIcon(new ImageIcon("X-.gif"));
         }
        else if (wartoscPola[6] + wartoscPola[7] + wartoscPola[8] == 3)
         {
             pole[6].setIcon(new ImageIcon("X-.gif"));
             pole[7].setIcon(new ImageIcon("X-.gif"));
             pole[8].setIcon(new ImageIcon("X-.gif"));
         }
        else if (wartoscPola[0] + wartoscPola[3] + wartoscPola[6] == 3)
         {
             pole[0].setIcon(new ImageIcon("X!.gif"));
             pole[3].setIcon(new ImageIcon("X!.gif"));
             pole[6].setIcon(new ImageIcon("X!.gif"));
         }
        else if (wartoscPola[1] + wartoscPola[4] + wartoscPola[7] == 3)
         {
             pole[1].setIcon(new ImageIcon("X!.gif"));
             pole[4].setIcon(new ImageIcon("X!.gif"));
             pole[7].setIcon(new ImageIcon("X!.gif"));
         }
        else if (wartoscPola[2] + wartoscPola[5] + wartoscPola[8] == 3)
         {
             pole[2].setIcon(new ImageIcon("X!.gif"));
             pole[5].setIcon(new ImageIcon("X!.gif"));
             pole[8].setIcon(new ImageIcon("X!.gif"));
         }
        else if (wartoscPola[6] + wartoscPola[4] + wartoscPola[2] == 3)
         {
             pole[6].setIcon(new ImageIcon("X ukosna w góre.gif"));
             pole[4].setIcon(new ImageIcon("X ukosna w góre.gif"));
             pole[2].setIcon(new ImageIcon("X ukosna w góre.gif"));
         }
        else if (wartoscPola[0] + wartoscPola[4] + wartoscPola[8] == 3)
         {
             pole[0].setIcon(new ImageIcon("X ukosna w dół.gif"));
             pole[4].setIcon(new ImageIcon("X ukosna w dół.gif"));
             pole[8].setIcon(new ImageIcon("X ukosna w dół.gif"));
         }
        else if (wartoscPola[0] + wartoscPola[1] + wartoscPola[2] == 30)
         {
             pole[0].setIcon(new ImageIcon("O-.gif"));
             pole[1].setIcon(new ImageIcon("O-.gif"));
             pole[2].setIcon(new ImageIcon("O-.gif"));
         }
        else if (wartoscPola[3] + wartoscPola[4] + wartoscPola[5] == 30)
         {
             pole[3].setIcon(new ImageIcon("O-.gif"));
             pole[4].setIcon(new ImageIcon("O-.gif"));
             pole[5].setIcon(new ImageIcon("O-.gif"));
         }
        else if (wartoscPola[6] + wartoscPola[7] + wartoscPola[8] == 30)
         {
             pole[6].setIcon(new ImageIcon("O-.gif"));
             pole[7].setIcon(new ImageIcon("O-.gif"));
             pole[8].setIcon(new ImageIcon("O-.gif"));
         }
        else if (wartoscPola[0] + wartoscPola[3] + wartoscPola[6] == 30)
         {
             pole[0].setIcon(new ImageIcon("O!.gif"));
             pole[3].setIcon(new ImageIcon("O!.gif"));
             pole[6].setIcon(new ImageIcon("O!.gif"));
         }
        else if (wartoscPola[1] + wartoscPola[4] + wartoscPola[7] == 30)
         {
             pole[1].setIcon(new ImageIcon("O!.gif"));
             pole[4].setIcon(new ImageIcon("O!.gif"));
             pole[7].setIcon(new ImageIcon("O!.gif"));
         }
        else if (wartoscPola[2] + wartoscPola[5] + wartoscPola[8] == 30)
         {
             pole[2].setIcon(new ImageIcon("O!.gif"));
             pole[5].setIcon(new ImageIcon("O!.gif"));
             pole[8].setIcon(new ImageIcon("O!.gif"));
         }
        else if (wartoscPola[6] + wartoscPola[4] + wartoscPola[2] == 30)
         {
             pole[6].setIcon(new ImageIcon("O ukosna w góre.gif"));
             pole[4].setIcon(new ImageIcon("O ukosna w góre.gif"));
             pole[2].setIcon(new ImageIcon("O ukosna w góre.gif"));
         }
        else if (wartoscPola[0] + wartoscPola[4] + wartoscPola[8] == 30)
         {
             pole[0].setIcon(new ImageIcon("O ukosna w dół.gif"));
             pole[4].setIcon(new ImageIcon("O ukosna w dół.gif"));
             pole[8].setIcon(new ImageIcon("O ukosna w dół.gif"));
         }
    }

da się uprościć (jeżeli się gdzieś nie pomyliłem) do funkcji (szkic pseudokodu):

function ustaw_obrazek(i, j, k):
   if (i==6 and j==4 and k==2) or (i==0 and j==4 and k==8):
          pole[i].setIcon(new ImageIcon("O ukosna w dół.gif"));
          pole[j].setIcon(new ImageIcon("O ukosna w dół.gif"));
          pole[k].setIcon(new ImageIcon("O ukosna w dół.gif"));
   else: if wartoscPola[i] + wartoscPola[j] + wartoscPola[k] == 3:
              x == "X!.gif"   
          else:
              x == "O!.gif"   
          pole[i].setIcon(new ImageIcon(x));
          pole[j].setIcon(new ImageIcon(x));
          pole[k].setIcon(new ImageIcon(x));
end function
0

Jak Java to nawet nie tykamy. Zanim odpalimy gre to będzie sylwester 2018

0

hurgadion - fakt wygląda to mało profesjonalnie ale nie miałem wtedy innego pomysłu, w drugiej gierce kwestie warunków lepiej rozwiązałem (tak myślę). Właściwie to bardziej mi zależy na ocenie " Kamień papier nożyce " bo więcej się tam napracowałem

1

Może i lepiej, ale dalej widzę, że piszesz kod po kawałku, nie pamiętając co napisałeś chyba chwilę temu, na przykład kod:

void ustawMojePole(int i)
    {
        if( i == 0)
        poleGracza[7].setIcon(new ImageIcon("NiebieskiPapier.gif"));
        if( i == 1)
        poleGracza[7].setIcon(new ImageIcon("NiebieskiKamien.gif"));
        if( i == 2)
        poleGracza[7].setIcon(new ImageIcon("NiebieskieNozyce.gif"));
        
        mojePole = i;
    }

chyba da się uprościć do kodu:

void ustawMojePole(int i)
    {
        poleGracza[7].setIcon(new ImageIcon(znaki[i]));
        mojePole = i;
    }

Jeżeli chodzi o grafikę, to na moje oko, chyba OK :) ale zmień trochę sposób wyświetlania wyników, wyrównaj odstępy między rezultatami, no i jak jest napisane Gracz 1:5, to nie wiadomo o co chodzi, więc zrób raczej większy odstęp. :)

0

Faktycznie. Nawet tego nie zauważyłem. pewnie dlatego ze poświęcałem 1-2h dziennie i co chwile wpadała mi jakaś inna koncepcja i pozapominałem co wcześniej robiłem Nie wiem czy będę dalej rozwijał te dwa programy. Jestem w połowie kursu na Udemy i chciałem porostu sprawdzić ile potrafię zrobić . Ale bardzo dziękuje za opinie

0

Dobra. Jeszcze w pełni go nie opanowałem ale udało mi się wrzucić projekt na GitHub. Powiedzcie mi jeżeli zrobiłem coś nie tak.
Oto link : https://github.com/MrNykla/PapierKamienNozyce

4

Na mnie największe wrażenie zrobił pusty tekst, wypozycjonowany spacjami.

String pustyTekst =  "              Gracz " + (i + 1) + " : " + punktyGracza[i];

Wiem że nie powonieniem nazywać zmiennych po polsku ale robię to aby łatwiej było mi zrozumieć o co chodzi.

W moim przypadku to się szczerze mówiąc nie powiodło. Pewnie rozumuję w prymitywnych kategoriach, ale nie ułatwia mi zrozumienia, o co chodzi, fakt, że "pusty tekst" zawiera jakiś tekst. Nie spotkałem się dotychczas z takim znaczeniem słowa "pusty" w języku polskim.

0

Jestem po lekcji z tworzenia plików, strumieni więc postanowiłem pobawić się trochę kodem do Kamień Papier Nożyce.
Dodałem możliwość zmiany swojej nazwy oraz jej zapisania tak ze po pierwszym uruchomieniu gry jednorazowo wyskakuje okienko do ustawienia swojej nazwy gracza a potem ta nazwa zostanie zapisana oraz możliwość zmiany już zapisanej nazwy gracza i trochę poprawiłem wyświetlanie wyniku.
Link do zmian : https://github.com/MrNykla/PapierKamienNozyce/commit/47e233681e86a1a3f2b4a1569a1bbf191972ba2c#diff-b291ec02304bfbef93c5fc1d84a0cb91

0

No dobra chcecie sie pośmiać to proszę:

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTextField;

Zamiast

import java.awt.*;
import java.io.*;
import java.util.Random;
import javax.swing.*;
import javax.swing.JTextField;
0

Rozczaruje cie. Edytor sam dodawał potrzebne mi importy dlatego za bardzo nie musiałem o tym myśleć. Ale masz racje, wygląda głupio, więc poprawiłem to. A i chodzi ci o papier kamień nożyce a nie kolka i krzyżyka.

0

Istnieje szkoła traktująca te grupowe importy jako złą praktykę, vide np. https://seanmonstar.com/post/708954358/import-star-considered-harmful

W jednym projekcie spotkałem się nawet z konfiguracją CI, która zawierała inspekcję karzącą za nie wywaleniem builda.

Uważam to za przesadę, ale warto mieć świadomość, że to nie kuriozum, tylko sprawa kontrowersyjna.

0

Teraz juz nie tyle lat bo teraz jest łatwiej, najważniejsze to mieć pomysł żeby napisać program. Bo bez tego nauka z książek na sucho nie ma sensu. Zrób teraz program serwer przez TCP który nasłuchuje na porcie i ma pole gdzie textarea gdzie wyświetlają się komunikaty. I napisz klienta który się łączy i może wysyłać wiadomości. Ot taki prosty czat. Wstaw to później na stronę żebyśmy mogli się połączyć i sprawdzić jak działa.

0

Jak znajdę czas to spróbuje. Tylko będę musiał się douczyć bo jeszcze serwera nie stawiałem, ale jak mi się uda to na pewno się nim pochwale.

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