Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

nyac55

Problem z projektem pisanym pod Linuxa?

Polecane posty

Witam. Muszę napisać projekt pod system Linux, może to być np. gra, wymyśliłem, że mogłyby to być "Państwa-Miasta", jednak łatwiej może będzie napisać grę karcianą np. w Pana. Gra musi być sieciowa, ma pozwalać grać kilku graczom oraz musi posiadać interfejs graficzny, czyli okienko. Jak myślicie co łatwiej będzie napisać?? Będę potrzebował, także porad i pomocy z programem.

Link do komentarza
Udostępnij na innych stronach

Czy od Państw- miast nie będzie łatwiejszy jakiś quiz z pytaniami?

Dodam, że gra musi być wieloosobowa np. 2-osobowa. Język: jeżeli można pisać w C++ to właśnie taki będzie język, co do technologii to się nie orientuję, chodzi o środowisko graficzne? Projekt musimy pokazywać etapami np. 1 etap interfejs graficzny, 2 - coś już z lekką komunikacją itd.

Link do komentarza
Udostępnij na innych stronach

Pewnie będzie. To Twój projekt i Twoja uczelnia, więc sam powinieneś wiedzieć, jaki projekt możesz wybrać. Równie dobrze możesz zrobić statki.

Możesz pomyśleć o bibliotece QT - całkiem fajna biblioteka do C++ pozwalająca na tworzenie okienek (zakładając, że Twój projekt będzie się nadawał na okienka - alternatywą jest coś do 2D, np SFML) oraz wspierająca komunikację sieciową.

Link do komentarza
Udostępnij na innych stronach

Zastanawia się teraz co wybrać czy język C++ czy C#. Do C# słyszałem coś o mono, co jest alternatywą Visual Studio, co do tej biblioteki QT i języka C++, tworzyłem aplikacje konsolowe pod Windowsa, lecz z programowania obiektowego nic nie robiłem, więc jeśli łatwiej mi będzie napisać tą grę w C# to chyba wybiorę C#.

Link do komentarza
Udostępnij na innych stronach

tworzyłem aplikacje konsolowe pod Windowsa, lecz z programowania obiektowego nic nie robiłem
Aplikacje konsolowe i programowanie obiektowe to dwa różne pojęcia. Nic nie stoi na przeszkodzie aby aplikacja była i obiektowa i konsolowa jednocześnie.
lecz z programowania obiektowego nic nie robiłem, więc jeśli łatwiej mi będzie napisać tą grę w C# to chyba wybiorę C#.
Pozwolę sobie nieco sparafrazować: "nie mam pojęcia o programowaniu obiektowym, więc może lepiej (łatwiej) będzie mi to zrobić w języku, który programowanie obiektowe wymusza?"

C# to wynalazek Microsoftu. Linux i Microsoft raczej średnio idą w parze. Już dawno nie interesowałem się jak tam Mono działa, ale pewnie różnie z tym bywa.

Ja bym radził spróbować QT. Przy tego typu aplikacji "obiektowość" będzie znikoma.

Link do komentarza
Udostępnij na innych stronach

@nyac55 Piszesz, że nie miałeś styczności z programowaniem obiektowym, a wybrałeś język, gdzie nie da się pisać nieobiektowo. Ty nawet z ogarnięciem prostych rzeczy w C++ masz spory problem, więc niestety, ale nie sądzę, byś poradził sobie z Javą. Jeśli już koniecznie chcesz pisać w języku tego typu, to łatwiejszy jednak będzie C#. A tak poza tym to, że język jest multiplatformowy, nie gwarantuje jeszcze, że kod będzie bez żadnych problemów działał na wszystkich platformach. Czasem trzeba jednak coś poprawiać, a znalezienie błędu w przypadku Javy może być trudniejsze niż w przypadku C++.

A tak poza tym:

Window'sie

Naucz się używać apostrofu. W tym przypadku stosowanie go jest błędem. Przeczytaj sobie np. to.

Link do komentarza
Udostępnij na innych stronach

Jeśli ktoś orientuje się w Javie prosiłbym o pomoc, mam niewielki ułamek aplikacji i próbuję obecnie ustawić pola z tekstem, aby były umieszczone w sposób:

Państwa Miasta Zwierzęta Rośliny Rzeczy Punkty

pole pole pole pole pole pole

Jednak jak na razie ma to odwrotny skutek.

Poniżej kod:

https://www.dropbox.com/s/td02ua7ixmb60lb/Gra.rar // katalog src/gra/GRA jest zawartość lub można uruchomić cały projekt

Link do komentarza
Udostępnij na innych stronach

Pojedynczy panel może być zarządzany tylko przez jednego LayoutManagera, bardziej skomplikowany rozkład komponentów w panelu możesz uzyskać np. poprzez zagnieżdżanie paneli z różnymi LayoutManagerami.

I chyba musisz jeszcze raz przemyśleć sam rozkład komponentów na ekranie - tekst w górnym JLabel'u nie będzie zbytnio dopasowany do elementów poniżej.

Nie wiem, jak ma wyglądać całe okno, ale może warto zaznajomić się z JTable, a jeżeli mimo wszystko wolisz wiele komponentów, to lepiej najpierw sobie rozpisz całe drzewko zagnieżdżonych paneli, bo inaczej szybko się pogubisz.

Link do komentarza
Udostępnij na innych stronach

Panel ma wyglądać np. tak, że tekst Państwa Miasta itd. ma być na samej górze jako np. nagłówki kolumn, a poniżej kolumny, czyli zwykłe pola do wprowadzania tekstu.

______________________________________


package gra;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Gra
{
public Gra()
{
JFrame frame = new JFrame("Państwa-Miasta");
JPanel ContentPane = (JPanel) frame.getContentPane();
//ContentPane.setLayout(new BorderLayout());
ContentPane.add(new JLabel("Państwa Miasta Zwierzęta Rośliny Rzeczy Punkty"));
ContentPane.setLayout(new GridLayout(0, 6, 2, 2));
public GridLayout(int rows, int cols,int vergap, int horgap);
ContentPane.add(new JTextField("JtextField"));
ContentPane.add(new JTextField("JtextField"));
ContentPane.add(new JTextField("JtextField"));
ContentPane.add(new JTextField("JtextField"));
ContentPane.add(new JTextField("JtextField"));
ContentPane.add(new JTextField("JtextField"));

// // ///ContentPane.setLayout(new GridLayout(6, 6));
//ContentPane.add(new JButton("Click Me"));
frame.setSize(new Dimension(800, 600));
frame.setLocation(100, 100);

frame.addWindowListener( new WindowAdapter()
{public void windowClosing(WindowEvent e) {System.exit(0);}});
frame.setVisible(true);
}

public static void main(String[] args)
{
new Gra();

}
}

Obecnie dodałem konstruktor:


public GridLayout(int rows, int cols,int vergap, int horgap);

i zmieniłem parametry w Layoucie wyżej lecz powoduje to błąd, proszę o pomoc.

Link do komentarza
Udostępnij na innych stronach

Chcę zrobić takie coś, że na górze okienka jest 1 wiersz i wypisane: państwa, miasta itd. poniżej tabelka, która odpowiada podanym nazwom. Właściwie wszystko może być 1 wielką tabelką, lecz pola na samej górze muszą być na stałe bez możliwości zamiany.

_+_+_

W podanym kodzie chciałem jakoś zmniejszyć wielkość pól do wpisywania i jakoś je rozmieścić.

Link do komentarza
Udostępnij na innych stronach

Chodziło mi dokładnie o linijkę:


public GridLayout(int rows, int cols,int vergap, int horgap);

No i masz już pomysł, jak chcesz te elementy w oknie porozmieszczać? Bo zakres zmian w porównaniu do poprzedniej wersji sugeruje, że o LayoutManager'ach nie wiesz dużo więcej.

Link do komentarza
Udostępnij na innych stronach

Już wiem, że to co napisałem jest zbędne i niepotrzebne. Czy mogę w jakiś sposób stworzyć 1 Layout, aby napisy pól Państwa, Miasta itd. umieścić na samej górze, a następnie jakoś ten layout "zakończyć" i nowym grid layoutem zrobić puste pola lub zrobić jedną wielką tabelę na wszystko na górze tylko pola Państwa Miasta zablokować, wiesz jak mogę to zrobić?

Według jakiegoś poradnika zmieniłem nieco układ, jednak o dziwo nic się nie pojawia w oknie


package gra;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Gra
{
public Gra()
{
JFrame frame = new JFrame("Państwa-Miasta");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 400);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 6, 0, 0));
JLabel label1 = new JLabel ("Państwa");
JLabel label2 = new JLabel ("Miasta");
JLabel label3 = new JLabel ("Zwierzęta");
JLabel label4 = new JLabel ("Rośliny");
JLabel label5 = new JLabel ("Rzeczy");
JLabel label6 = new JLabel ("Punkty");
JTextField text1 = new JTextField("");
JTextField text2 = new JTextField("");
JTextField text3 = new JTextField("");
JTextField text4 = new JTextField("");
JTextField text5 = new JTextField("");
JTextField text6 = new JTextField("");
panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(label4);
panel.add(label5);
panel.add(label6);
panel.add(text1);
panel.add(text2);
panel.add(text3);
panel.add(text4);
panel.add(text5);
panel.add(text6);


}

public static void main(String[] args)
{
new Gra();

}
}

Link do komentarza
Udostępnij na innych stronach

Ja bym to widział tak: musisz mieć panel z GridLayout'em, który będzie zawierał 2 wiersze i (dla obecnych pól) 6 kolumn. W pierwszym wierszu będą JLabel'e z nazwami kategorii, w drugim - JTextField'y, do których będzie się wprowadzać rozwiązania.

Oczywiście gdybyś to wrzucił do głównego okna, to miałbyś niepotrzebnie wysokie pola, więc całość możesz wrzucić do wcześniej utworzonego JPanel'a i dopiero jego umieścić w głównym oknie (np. BorderLayout, North).

Rozwiązanie nie jest może idealne, ale powinno Ci nieco przybliżyć ideę zagnieżdżonych paneli i może okazać się wystarczające.

Link do komentarza
Udostępnij na innych stronach



package gra;

//import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Gra
{
public Gra()
{
JFrame frame = new JFrame("Państwa-Miasta");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 400);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 6, 0, 0));
JLabel label1 = new JLabel ("Państwa");
JLabel label2 = new JLabel ("Miasta");
JLabel label3 = new JLabel ("Zwierzęta");
JLabel label4 = new JLabel ("Rośliny");
JLabel label5 = new JLabel ("Rzeczy");
JLabel label6 = new JLabel ("Punkty");
JTextField text1 = new JTextField("");
JTextField text2 = new JTextField("");
JTextField text3 = new JTextField("");
JTextField text4 = new JTextField("");
JTextField text5 = new JTextField("");
JTextField text6 = new JTextField("");
panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(label4);
panel.add(label5);
panel.add(label6);
panel.add(text1);
panel.add(text2);
panel.add(text3);
panel.add(text4);
panel.add(text5);
panel.add(text6);
JPanel panel2 = new JPanel();
panel2.setLayout(new BorderLayout(panel).NORTH); //czy to jest poprawny zapis?


}

public static void main(String[] args)
{
new Gra();

}
}

Czy w BorderLayoucie powinny być tylko Labele czy Labele i TextFieldy?

Link do komentarza
Udostępnij na innych stronach

Podpięcie panelu pod frame'a wygląda tak (panel2 jest zbędny):


frame.add(panel);
// ew. tak, ale chyba najpierw trzeba by ustawić tego BorderLayout'a we frame'ie
// frame.add(panel, BorderLayout.NORTH);

Sam panel zawiera już w sobie wszystkie JLabel'e i JTextField'y, więc nie trzeba ich osobno podpinać.

//czy to jest poprawny zapis?

Nie. NORTH to statyczne pole typu String w klasie BorderLayout, a metoda setLayout potrzebuje LayoutManager'a, nie Stringa. NORTH możesz użyć w metodzie add (tak jak powyżej).

Link do komentarza
Udostępnij na innych stronach

OK, obecnie podpiąłem do okna panel, lecz chyba znowu coś jest nie tak, okienko nadal jest puste?


package gra;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Gra
{
public Gra()
{
JFrame frame = new JFrame("Państwa-Miasta");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 400);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 6, 0, 0));
JLabel label1 = new JLabel ("Państwa");
JLabel label2 = new JLabel ("Miasta");
JLabel label3 = new JLabel ("Zwierzęta");
JLabel label4 = new JLabel ("Rośliny");
JLabel label5 = new JLabel ("Rzeczy");
JLabel label6 = new JLabel ("Punkty");
JTextField text1 = new JTextField("");
JTextField text2 = new JTextField("");
JTextField text3 = new JTextField("");
JTextField text4 = new JTextField("");
JTextField text5 = new JTextField("");
JTextField text6 = new JTextField("");
panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(label4);
panel.add(label5);
panel.add(label6);
panel.add(text1);
panel.add(text2);
panel.add(text3);
panel.add(text4);
panel.add(text5);
panel.add(text6);
frame.add(panel, BorderLayout.NORTH);


}

public static void main(String[] args)
{
new Gra();

}
}

Link do komentarza
Udostępnij na innych stronach

OK, teraz działa, dziękuję za pomoc. :) Teraz musiałbym zająć się obsługą sieci, gra powinna : uruchomiona w sieci LAN na 2 komputerach, powinna komunikować się jakoś z swoją odpowiedniczką na innym komputerze. Myślę, że może to być np. sprawdzanie czy pole np. nazwa państwa zaczyna się od tej samej litery itd. Wiesz może jak powinienem to zrobić od czego zacząć?

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...