Spielvorstellung: Kniffel

Private Void

Aktives Mitglied
Hallo zusammen!

Ich hab mal ein kleines Kniffel-Spiel programmiert. Bitte postet mal, was ihr davon haltet.
 

Anhänge

  • Kniffel.jar
    24,4 KB · Aufrufe: 223
Zuletzt bearbeitet:

Private Void

Aktives Mitglied
Um sich den SourceCode anzuschauen, müsste dieser erstmal vorhanden sein ;)

Ok, ich hätt vielleicht dazu sagen sollen, dass es sich aufs Ergebnis bezog.

Kniffel$1.class bis Kniffel$16.class und Kniffel.class.. kann es sein das du alles in eine Klasse geschmissen hast?

Um ehrlich zu sein wusste ich hier in diesem Fall nicht so recht, was ich alles in eine zweite, dritte ... Klasse hätte auslagern sollen.
Die Erstellung der Zufallszahlen ist ein Dreizeiler mit einer for-Schleife drum rum (wenn das schon für eine eigene Klasse ausreicht, ändere ich das natürlich ab) und alles andere bezieht sich auf die Benutzerberfläche, die ich zumindest in diesem hier vorliegenden Fall meine, in einer einzelnen Klasse abhandeln zu können, weil sie wie ich finde noch nicht allzu umfangreich und vielschichtig ist.
 
G

Gonzo17

Gast
Die Oberfläche gefällt mir garnicht. Die Radio-Buttons sollten besser Checkboxen sein. Die Buttons rechts sollte man schöner anordenen. Und es wäre von Vorteil, wenn du dem User irgendeinen Anhaltspunkt gibst, wie das Programm funktionieren soll (zB durch Tooltips). Wenn man nicht genau weiss was bei Kniffel zu tun ist, dann ist man irgendwie auf verlorenem Posten. Und irgendwie passiert auch nichts, wenn man am Ende ist, da gehts dann einfach nich weiter. ???:L
 

Marco13

Top Contributor
Naja... Je nachdem, mit welchem Kenntnisstand das entwickelt wurde... Hm.

Ein konsistentes Layout wäre nicht verkehrt. Die Buttons könnte man vielleicht lieber disablen statt verschwinden lassen - oder allgemein: Nur enablen, was man auch anklicken kann (so kann man einfach alles anklicken, und dann ist das Bild leer...). Ein bißchen Hirnschmalz wäre ja vielleicht nötig, wenn man überprüfen würde, was man "sinnvoll" anklicken kann, also wenn man z.B. 4,5,6,3,6 gewürfelt hat einen Roten Rahmen (oder so) um "3er","4er","5er","6er" und "Kleine Straße" anzuzeigen. Von sowas wie einem Mehrspielermodus mal abgesehen....
 

Private Void

Aktives Mitglied
Also in Sachen Kenntnisstand kann ich sagen: ich hab vor einem halben Jahr angefangen, mich überhaupt mit Software-Programmierung zu befassen - und selbst das mit mehreren kleineren Pausen.

Natürlich ist das, was ich da fabriziert habe, nicht gerade ein Meisterwerk. Je mehr Input ihr mir verabreicht, bezüglich dessen, was sich alles noch auf welche Weise verbessern lässt, desto besser.

Gonzo17 hat ja schonmal vorgeschlagen, statt RadioButtons CheckBoxen zu verwenden.
Disablen statt setVisible(false).

Welches Layout könnte ich denn anstelle vom verwendeten GridBagLayout nehmen?

Ich merke schon: bisher ist mein Programm noch nicht gut angekommen.
Aber ich sag mal so: mit jeder Kritik wird es eher besser als schlechter (was wahrscheinlich nach dem momentanen Stand der Dinge noch nicht allzu schwierig sein dürfte :lol:)
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
Zur Oberfläche: Man bräuchte eine Tabelle, in der man seine Punkte sehen kann. Ich sehe zwar meine Gesamtpunkte, aber nicht was ich wirklich gesetzt habe.
 

Marco13

Top Contributor
Hm. Welches Layout...? Diejenigen, die sich Kniffel ausgedacht haben, haben sich vermutlich auch überlegt, wie man das Layout des Spielzettels "gut" machen könnte :meld: ;)

Es ist ja nichts "falsch" an dem Programm an sich, und es funktioniert ja auch und so, aber abgesehen davon, dass andere die Messlatte schon recht hoch gelegt haben kann man ein Programm, von dem man nur die Oberfläche sieht, auch nur nach dieser beurteilen. Vielleicht ist dein Programm intern supertoll strukturiert und so, aber im positiven wie im negativen Sinne ist es eben meistens so: "Das Programm" ist für die meisten nicht der Quellcode, sondern das, was man auf dem Bildschirm sieht....
 
G

Gonzo17

Gast
Ich merke schon: bisher ist mein Programm noch nicht gut angekommen.
Aber ich sag mal so: mit jeder Kritik wird es eher besser als schlechter (was wahrscheinlich nach dem momentanen Stand der Dinge noch nicht allzu schwierig sein dürfte :lol:)

Das ist aber auch keinesfalls böse gemeint. ;) Es ist ja nicht so, dass das Programm grottenschlecht ist, vor allem nicht, wenn du eben Anfänger bist, aber der erste Eindruck ist eben nicht sehr ansprechend. Von der Funktionalität her tuts ja schonmal fast genau das, was man erwartet, das ist auch was wert! Wie gesagt, lediglich das Ende sollte noch irgendwie "verarbeitet" werden, sonst weiss man ja auch nicht, dass da überhaupt ein Ende ist.
 

Quaxli

Top Contributor
Für ein halbes Jahr programmieren imho ja schonmal nicht schlecht. Da haben wir hier schon Schlechteres gesehen. ;) Heb' Dir das mal gut auf und schau es Dir in einem Jahr nochmal an. Da kannst Du dann die Hände über dem Kopf zusammenschlagen und Dich wundern, was Du damals fabriziert hast :D:D:D
Zum Thema Layout haben ja die Vorredner schon einiges gesagt. Was mir noch aufgefallen ist: Man kann, nachdem der letzte Button verschwunden ist, nochmal würfeln. Das solltest Du auf jeden Fall noch abstellen.
Was ein nettes Feature wäre, allerdings auch etwas aufwändiger: Wenn man angezeigt bekäme, was mit dem momentanen Würfelergebnis realisierbar wäre.
 

Private Void

Aktives Mitglied
Ist schon in Ordnung so, Gonzo ;) - ich bin keineswegs beleidigt oder sowas.

Sicherlich wäre JTable eine mögliche Lösung für die Anzeige der einzelnen erzielten Wertungen. Ich hab aber noch nie damit rumgewerkelt - weiß also noch überhaupt nicht, wie das funktioniert. Muss ich mich also mal im Forum umsehen und API aufsuchen.
Mithilfe einer Textabrage, ob für bestimmte Wertungen schon eine Punktzahl in der Tabelle existiert, kann ich ja dann die JButtons mittels if-Bedingung disablen, anstatt sie unsichtbar zu machen.

Wir können ja mal eine kleine ToDo-Liste erstellen:
- Checkbox statt RadioButton
- Würfel als Images darstellen und nicht mehr als Zahlen (muss ich auch noch rausfinden, wie das geht)
- Das Markieren der JButtons, deren Wertungen zur Zeit möglich wären (durch Border?)
- in die Menü-Leiste das JMenuItem 'Spielanleitung' (mit entsprechender Funktion) einfügen [evtl. in ein JMenu 'Hilfe']
- JTable?
Hab ich was vergessen?

Kann man fürs JFrame definieren, dass man die Größe des Fensters nicht ändern kann, also die Voreinstellung vom Programm fest beibehalten wird?

Dass das Spiel zuende ist, könnte ich vielleicht dadurch verdeutlichen, dass erst dann, wenn alle Wertungen in der Tabelle eingetragen sind, die Gesamtpunktzahl ausgerechnet und angezeigt wird.

Einen Mehrspieler-Modus könnte ich ja mittels CardLayout realisieren, indem nach jedem Eintrag der/die/das Card automatisch gewechselt wird. Auf jeden der Cards müsste dann natürlich auch "Spieler 1", "Spieler 2", etc. stehen. Am Ende müssen dann alle Ergebnisse nach Höhe sortiert in einer Rangliste dargestellt werden.
 
Zuletzt bearbeitet:
M

MiDniGG

Gast
Kann man fürs JFrame definieren, dass man die Größe des Fensters nicht ändern kann, also die Voreinstellung vom Programm fest beibehalten wird?

Ja. Ich glaube es hieß setResizable(false); :) Aber bin nicht 100% sicher :-D

Edit: Ich hatte Recht! :) Frame (Java 2 Platform SE 5.0)

Dass das Spiel zuende ist, könnte ich vielleicht dadurch verdeutlichen, dass erst dann, wenn alle Wertungen in der Tabelle eingetragen sind, die Gesamtpunktzahl ausgerechnet und angezeigt wird.

Ich würde es so machen, dass am Ende einfach alle Buttons disabled sind, außer einem "Neues Spiel" Button. :)

Einen Mehrspieler-Modus könnte ich ja mittels CardLayout realisieren, indem nach jedem Eintrag der/die/das Card automatisch gewechselt wird. Auf jeden der Cards müsste dann natürlich auch "Spieler 1", "Spieler 2", etc. stehen. Am Ende müssen dann alle Ergebnisse nach Höhe sortiert in einer Rangliste dargestellt werden.

Das klingt gut. :) Mach das :)
 

Juwi97

Mitglied
Naja... Je nachdem, mit welchem Kenntnisstand das entwickelt wurde... Hm.

Ein konsistentes Layout wäre nicht verkehrt. Die Buttons könnte man vielleicht lieber disablen statt verschwinden lassen - oder allgemein: Nur enablen, was man auch anklicken kann (so kann man einfach alles anklicken, und dann ist das Bild leer...). Ein bißchen Hirnschmalz wäre ja vielleicht nötig, wenn man überprüfen würde, was man "sinnvoll" anklicken kann, also wenn man z.B. 4,5,6,3,6 gewürfelt hat einen Roten Rahmen (oder so) um "3er","4er","5er","6er" und "Kleine Straße" anzuzeigen. Von sowas wie einem Mehrspielermodus mal abgesehen....

Nur enablen was man auch anklicken kann...


Hört sich gut an, wie wäre es mit einer Version mit verschiedenen Schwierigkeitsgraden?
 

Private Void

Aktives Mitglied
Nur enablen was man auch anklicken kann...

Gegen Ende des Spiels kann es passieren, dass selbst nach dem dritten Wurf keine der verbleibenden Wertungen erfüllt werden kann und eine mit 0 Punkten gestrichen werden muss. Das muss man eben dann berücksichtigen, dass man nach dem dritten Wurf sich zum Wegstreichen frei für eine entscheiden kann, sollte keine der Bedingungen erfüllt werden können
 

Marco13

Top Contributor
Man könnte darüber jetzt philosophieren, aber theoretisch kann man ja auch einen Kniffel werfen, und dann entscheiden "Och, ich streiche jetzt mal meine große Straße :autsch: ". Aber im Moment kann man ja praktisch von anfang an ohne zu werfen ALLES streichen.... das ist IMHO nicht so schön...
 

ren92

Mitglied
Hey Praivate Void!

könntest du vll mal deinen quellcode hier rein stellen? weil ich bin zur zeit auch an einem Kniffel Projekt dran! mir fehlt allerdings die große und kleine Straße! ich komme da nicht ganz hinter, wie ich das am besten programmiere!
danke
 

ARadauer

Top Contributor
so zb...

Code:
import java.util.Arrays;


public class Test{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		int [] numbers = {1,2,3,4,6};
		System.out.println(isBigStreet(numbers));
		System.out.println(isSmallStreet(numbers));
			
	}
	
	public static boolean isBigStreet(int[] numbers){
		return lengthOfStreet(numbers) == 5;		
	}
	public static boolean isSmallStreet(int[] numbers){
		return lengthOfStreet(numbers) == 4;		
	}
	
	public static int lengthOfStreet(int[] numbers){
		Arrays.sort(numbers); //mal sortieren, falls noch nicht gemacht
		int maxLengthOfStreet = 0; //die maximale länge der straße
		int tempLengthOfStreet =1; //temporäre Zähler Variable
		for(int i =0; i<numbers.length-1; i++){ //von der ersten bis zur vorletzen
			if(numbers[i]+1!=numbers[i+1]){ //aktuelle nicht um eins kleiner als die nächste, dann ist die folge zu ende
				if(maxLengthOfStreet < tempLengthOfStreet) //maximum kleiner als temp
					maxLengthOfStreet = tempLengthOfStreet; // dann ist temp das neue maximum
				tempLengthOfStreet = 1; // und wir fangen neu an
			}else{
				tempLengthOfStreet++; //passt es erhöhen wir einfach den zähler
			}
		}
		if(maxLengthOfStreet< tempLengthOfStreet) // die aktuelle folge, größer als das maximum?
			maxLengthOfStreet = tempLengthOfStreet; //temp ist das neue maximum
		return maxLengthOfStreet;
	}
	

}

ohne gewähr.. has nicht sehr ausführlich getestet...
 

Private Void

Aktives Mitglied
Ich bin über den Code jetzt nur mal so drübergeflogen, aber hast du bei der kleinen Straße berücksichtigt, dass mittendrin eine Zahl doppelt vorkommen kann?
z.B. bei 2 3 4 4 5 , oder 1 2 2 3 4.

Bei der großen Straße hab ich einfach den Ausdruck 'numbers[0]+1 == numbers[1] && numbers[0]+2 == numbers[2] && numbers[0]+3 == numbers[3] && numbers[0]+4 == numbers[4]' als Bedingung für einen if-Block verwendet.

Natürlich muss die Zahlenreihe sortiert sein.

Für die kleine Straße hab ich die Liste bzw. das Array mit den Würfelzahlen durchsucht, ob eine Zahl doppelt vorkommt, eine der beiden Zahlen dann durch die Zahl 10 ersetzt , denn die kommt nicht als "Einzelwürfelergebins" vor und ist weit genug von der 6 als höchstmögliche Zahl weg, damit aus einer kleinen Straße nicht plötzlich eine große wird. Dann muss diese 10 an die letzte Stelle in der Liste / im Array verschoben werden.
Für die Bedingung im if-Block kannst du dann einfach den Ausdruck für die große Straße hernehmen und den letzten '=='-Vergleich einfach weglassen.


Konnte ich dir damit weiterhelfen?
 
Zuletzt bearbeitet:

ren92

Mitglied
Hey danke für eure schnellen Antworten!
echt top von euch!

Wenn ich deine If - Bedingung im Kopf durchgehe, erscheint sie mir auch logisch, aber wenn ich sie dann in mein programm einbaue hängt sich das kniffel programm auf.
Ich habe die Arrays auch mit merge() sortiert! Also dass die Inhalte aufsteigend sortiert sind!!!
Er hängt sich wie gesat auf! Habt Ihr ne Lösung?

Java:
public void mouseEntered(java.awt.event.MouseEvent e) {  
					int summeNeu = 0;
					if (merge() == true && geklickt == false) {
						if (wuerfel[0]+1 == wuerfel[1] && wuerfel[0]+2 == wuerfel[2] && wuerfel[0]+3 == wuerfel[3] && wuerfel[0]+4 == wuerfel[4]){
						
						summeNeu = 40;
						}
						
				}taLgStraight.setText(String.valueOf(summeNeu));
			}
 

tuttle64

Bekanntes Mitglied
Hallo, das Spiel finde ich ganz gut gelungen, was den Spielspass anbelangt. Vielleicht ist das Aussehen noch nicht ganz gelungen. Hier mal eine Idee, wie Kniffel aussehen könnte. Statt MenuBar nur zwei Buttons, statt die Buttons verschwinden zu lassen die Zeile in der Tabelle grau hinterlegen, eine Top 10 Liste wäre auch ganze nett usw.
 
Zuletzt bearbeitet:

ren92

Mitglied
also jungs,
ich habs problem gelöst...es läuft einigermaßen!

HTML:
http://rapidshare.com/files/390050071/kniffel4.jar
 
M

MiDniGG

Gast
Was solls den bei Kniffel für Schwierigkeitsgrade geben ? Die große (5er-) Straße nur mit 3 Würfeln zu schaffen oder wie?

Mann könnte Computergegner so einstellen, dass sie ziemlich dumme Sachen aufschreiben lassen... Das wäre die einzige Schwierigkeitsgradeinstellung (geiles Wort) das mir einfallen würde. :-D
 

Private Void

Aktives Mitglied
Hier eine nochmal überarbeitete Version von mir (es werden noch Verschönerungen/Ergänzungen/Verbesserungen hinzukommen => Feedback erwünscht!)

Da ich es unter Linux programmiert habe, weiß ich nicht so genau, wie es unter Windows oder Mac aussieht.
 

Anhänge

  • Kniffel.jar
    23,3 KB · Aufrufe: 40
Zuletzt bearbeitet:

Private Void

Aktives Mitglied
Wie kann man sowas verhindern, dass die Fensterhöhe von den verschiedenen Betriebssystemen anscheinend unterschiedlich interpretiert wird? Oder sind die JButtons unterschiedlich groß?

Ich hab's jetzt nochmal mit einer größeren Fensterhöhe hochgeladen.

PS: Unter dem Chance-Button kommt sowieso nichts mehr.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Android Spielvorstellung / Beta Tester gesucht Spiele- und Multimedia-Programmierung 5
K [Spielvorstellung] - Spoony Fish - (Android) Spiele- und Multimedia-Programmierung 3
P Run Or Fight Spielvorstellung Spiele- und Multimedia-Programmierung 10
K Spielvorstellung: DeadStorm Spiele- und Multimedia-Programmierung 2
P Spielvorstellung Etasund Spiele- und Multimedia-Programmierung 14
S Spielvorstellung: Raumschiff Spiele- und Multimedia-Programmierung 6
S Spielvorstellung: Time to Travel Spiele- und Multimedia-Programmierung 22
Oliver530 [Spielvorstellung] Minesweeper Spiele- und Multimedia-Programmierung 12
Fu3L SpielVorstellung: 25 Rooms Spiele- und Multimedia-Programmierung 5
P [Spielvorstellung] PowerX Spiele- und Multimedia-Programmierung 4
H Spielvorstellung: DarkRoom Spiele- und Multimedia-Programmierung 31
M.F.G. Spielvorstellung (plus KI frage): Connect Four – Extreme Spiele- und Multimedia-Programmierung 11
C Spielvorstellung: BallWar Spiele- und Multimedia-Programmierung 4
H Spielvorstellung: Nork Spiele- und Multimedia-Programmierung 24
T [Spielvorstellung] Block Shifter Spiele- und Multimedia-Programmierung 28
Fu3L Spielvorstellung: Delirium! (Ein LD48 Resultat) Spiele- und Multimedia-Programmierung 3
A Spielvorstellung: Wüstenhuhn Spiele- und Multimedia-Programmierung 9
B Spielvorstellung: GravoBlocks 3 Spiele- und Multimedia-Programmierung 34
Ein Keks [Spielvorstellung] Spider Solitaire Spiele- und Multimedia-Programmierung 2
T [Spielvorstellung] IMoY Wujinyou Spiele- und Multimedia-Programmierung 65
J Spielvorstellung: Vajanoid Spiele- und Multimedia-Programmierung 34
Aomx [Spielvorstellung] The NeverEnding Impulse Spiele- und Multimedia-Programmierung 17
B Spielvorstellung: GravoBlocks Spiele- und Multimedia-Programmierung 48
G Kniffel (Yahtzee) KI, wie geh ich es an? Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben