App Entwicklung Black Jack

  • Antworten:25
Sergen
  • Forum-Beiträge: 14

20.03.2012, 17:43:18 via Website

Hallo erstmal,

ich sitze momentan an einem Schulprojekt. Ich mache das Spiel Black Jack als app auf android Basis. Mit Java kenn ich mich gut aus. Mein problem ist eher die noch recht neue Entwicklungsumgebung von Android. Bis jetzt bin ich noch motiviert und es macht mir spaß mit Android eine App zu erstellen.
Eclipse und die nötigen Updates habe ich bereits installiert und auch schon einige kleinere tutorials auf der englischen seite http://developer.android.com/ gemacht.
Nun möchte ich mich an das Spiel ranwagen.
Bild: http://s7.directupload.net/file/d/2835/54dhtpwn_jpg.htm

1. Die Buttons habe ich schon in stings.xml hinzugefüht. Nun ist meine frage wie ich z.B. die karten umdrehen lassen kann, sodass dan 2,3,4,... (Karten) erscheinen, also wie verändere ich die image über die Acticity??
2. Wenn jetzt eine 3te Karte hinzukommt, wie füge ich die ein neben den anderen ein??
3. Wie kann ich das Textfeld neben Konto (500) den wert darin verändern ??
4. Muss ich noch andere Activitys einbauen oder kann ich das einfach alles über eins machen, und wenn ja wie ??

Dies sind meine Hauptprobleme bis jetzt ^^ muss erstmal weiter kommen. Das Programm soll erstmal so einfach wie möglich sein, erst später kann ich an der GUI rumspielen :)

MfG Sergen

— geändert am 20.03.2012, 17:54:41

Antworten
Stefan S.
  • Forum-Beiträge: 560

20.03.2012, 19:35:40 via Website

Du kannst die Bilder einfach ersetzen. Ich nehme mal an das sind ImageViews. Da kannst du zu Laufzeit die Source ändern.
Den Wert in der Textbox kann mittels myTextBox.setText("abc") verändert werden.

Ich denke du kannst für alles die gleiche Activity verwenden. Sehe gerade keinen Grund mehrere davon zu haben.

Antworten
Sergen
  • Forum-Beiträge: 14

20.03.2012, 19:52:34 via Website

ok danke ich probiers ma so.
Mir ist klar dass es viele methoden die schon vordefiniert sind, aber nur weis ich nie wie ich die finde oder suchen kann.

danke für schnelle antwort

Antworten
Sergen
  • Forum-Beiträge: 14

22.03.2012, 20:07:36 via Website

Weis einer wie man en Button oder ne Image nachträglich also im verlauf der activity erstellt ?? oder löscht ???

1package my.games.BlackJack_1;
2
3
4import android.app.Activity;
5import android.app.AlertDialog;
6import android.os.Bundle;
7import android.view.View;
8import android.view.View.OnClickListener;
9import android.widget.Button;
10import android.widget.EditText;
11import android.widget.TextView;
12
13public class BlackJack1Activity extends Activity implements OnClickListener {
14 /** Called when the activity is first created. */
15 private Button Deal;
16 private Button Set;
17 private Button Hit;
18 private Button Stay;
19 private Button OK;
20
21
22 private Deck deck;
23 public Player player;
24 public Player dealer;
25
26 private int einsatz;
27 private String name;
28 private int konto;
29
30 protected EditText NameAusgabe;
31 protected EditText NameEingabe;
32
33
34
35
36 @Override
37 public void onCreate(Bundle savedInstanceState) {
38 super.onCreate(savedInstanceState);
39 setContentView(R.layout.main);
40 NameAusgabe=(EditText) findViewById(R.id.NameAusgabe);
41 NameEingabe = (EditText) findViewById(R.id.NameEingabe);
42
43 player = new Player("player");
44 dealer = new Player("dealer");
45 konto=500;
46 //Buttons zuweisen
47 Deal = (Button)findViewById(R.id.Deal);
48 Deal.setOnClickListener(this);
49 Deal.setClickable(false);
50 Set = (Button)findViewById(R.id.Set);
51 Set.setOnClickListener(this);
52 Set.setClickable(false);
53 Hit = (Button)findViewById(R.id.Hit);
54 Hit.setOnClickListener(this);
55 Hit.setClickable(false);
56 Stay = (Button)findViewById(R.id.Stay);
57 Stay.setOnClickListener(this);
58 Stay.setClickable(false);
59 OK = (Button)findViewById(R.id.OK);
60 OK.setOnClickListener(this);
61 OK.setClickable(true);
62
63 NameAusgabe.setVisibility(View.INVISIBLE);
64
65
66
67
68
69 }
70 public void onClick(View v) {
71 if (v == Deal){
72
73
74 }
75 if (v == Set){
76 EditText et = (EditText)findViewById(R.id.Einsatz);
77 String stringEinsatz = et.getText().toString();
78 einsatz = Integer.parseInt(stringEinsatz);
79
80
81 }
82 if (v == Stay){
83
84 }
85 if (v == Hit){
86
87 }
88 if (v == OK){
89 TextView nameAusgabe = (EditText) findViewById(R.id.NameAusgabe);;
90 //Überprüfung Eingabe Name
91 EditText NameEingabe = (EditText) findViewById(R.id.NameEingabe);
92 //name =eingegebener Name
93 name = NameEingabe.getText().toString();
94 if (name.length() == 0) {
95 new AlertDialog.Builder(this)
96 .setMessage(R.string.errorName)
97 .setNeutralButton(R.string.ok, null)
98 .show();
99
100
101 }
102 else{
103 nameAusgabe.setText(name);
104 nameAusgabe.setVisibility(View.VISIBLE);
105 NameEingabe.setVisibility(View.INVISIBLE);
106 Deal.setClickable(true);
107 }
108
109 }
110
111
112 }
113
114
115}

NameAusgabe ist en textfenster über EingabeName liegt und am anfang invisble machen will aber wenn ich emulator startet die app net wegen dem wieso???

Antworten
Stefan S.
  • Forum-Beiträge: 560

23.03.2012, 12:06:42 via Website

Was sagt denn der LogCat dazu?

Antworten
Sergen
  • Forum-Beiträge: 14

23.03.2012, 16:00:00 via Website

in Console steht:
[2012-03-23 15:53:16 - BlackJack 1.0] ------------------------------
[2012-03-23 15:53:16 - BlackJack 1.0] Android Launch!
[2012-03-23 15:53:16 - BlackJack 1.0] adb is running normally.
[2012-03-23 15:53:16 - BlackJack 1.0] Performing com.example.hellol10n.BlackJack1Activity activity launch
[2012-03-23 15:53:16 - BlackJack 1.0] Automatic Target Mode: Preferred AVD 'emulator' is not available. Launching new emulator.
[2012-03-23 15:53:16 - BlackJack 1.0] Launching a new emulator with Virtual Device 'emulator'
[2012-03-23 15:53:30 - Emulator] emulator: WARNING: Unable to create sensors port: Unknown error
[2012-03-23 15:53:30 - Emulator] emulator: emulator window was out of view and was recentered
[2012-03-23 15:53:30 - Emulator]
[2012-03-23 15:53:30 - BlackJack 1.0] New emulator found: emulator-5554
[2012-03-23 15:53:30 - BlackJack 1.0] Waiting for HOME ('android.process.acore') to be launched...
[2012-03-23 15:54:02 - BlackJack 1.0] HOME is up on device 'emulator-5554'
[2012-03-23 15:54:02 - BlackJack 1.0] Uploading BlackJack 1.0.apk onto device 'emulator-5554'
[2012-03-23 15:54:03 - BlackJack 1.0] Installing BlackJack 1.0.apk...
[2012-03-23 15:54:22 - BlackJack 1.0] Success!
[2012-03-23 15:54:22 - BlackJack 1.0] Starting activity com.example.hellol10n.BlackJack1Activity on device emulator-5554
[2012-03-23 15:54:24 - BlackJack 1.0] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=my.games.BlackJack_1/com.example.hellol10n.BlackJack1Activity }

______________________________________
im Log steht:
03-23 14:14:56.794: D/dalvikvm(808): Not late-enabling CheckJNI (already on)
03-23 14:14:58.233: D/AndroidRuntime(808): Shutting down VM
03-23 14:14:58.233: W/dalvikvm(808): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-23 14:14:58.274: E/AndroidRuntime(808): FATAL EXCEPTION: main
03-23 14:14:58.274: E/AndroidRuntime(808): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{my.games.BlackJack_1/com.example.hellol10n.BlackJack1Activity}: java.lang.ClassNotFoundException: com.example.hellol10n.BlackJack1Activity
03-23 14:14:58.274: E/AndroidRuntime(808): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
03-23 14:14:58.274: E/AndroidRuntime(808): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-23 14:14:58.274: E/AndroidRuntime(808): at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-23 14:14:58.274: E/AndroidRuntime(808): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-23 14:14:58.274: E/AndroidRuntime(808): at android.os.Handler.dispatchMessage(Handler.java:99)
03-23 14:14:58.274: E/AndroidRuntime(808): at android.os.Looper.loop(Looper.java:137)
03-23 14:14:58.274: E/AndroidRuntime(808): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-23 14:14:58.274: E/AndroidRuntime(808): at java.lang.reflect.Method.invokeNative(Native Method)
03-23 14:14:58.274: E/AndroidRuntime(808): at java.lang.reflect.Method.invoke(Method.java:511)
03-23 14:14:58.274: E/AndroidRuntime(808): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-23 14:14:58.274: E/AndroidRuntime(808): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-23 14:14:58.274: E/AndroidRuntime(808): at dalvik.system.NativeStart.main(Native Method)
03-23 14:14:58.274: E/AndroidRuntime(808): Caused by: java.lang.ClassNotFoundException: com.example.hellol10n.BlackJack1Activity
03-23 14:14:58.274: E/AndroidRuntime(808): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
03-23 14:14:58.274: E/AndroidRuntime(808): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
03-23 14:14:58.274: E/AndroidRuntime(808): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
03-23 14:14:58.274: E/AndroidRuntime(808): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
03-23 14:14:58.274: E/AndroidRuntime(808): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
03-23 14:14:58.274: E/AndroidRuntime(808): ... 11 more

Antworten
Markus B.
  • Forum-Beiträge: 636

23.03.2012, 16:37:40 via Website

Hi,
ist ja ziemlich eindeutig oder ?

1java.lang.ClassNotFoundException: com.example.hellol10n.BlackJack1Activity
203-23 14:14:58.274: E/AndroidRuntime(808): at andro

vs.

1package my.games.BlackJack_1.BlackJack1Activity

Gruß,
Markus

Antworten
Sergen
  • Forum-Beiträge: 14

23.03.2012, 16:54:32 via Website

wie kann ich den fehler beheben??

ok hab einfach ein neues projekt angelegt und com.example.BlackJack gemacht da leuft es wieder. Oh man und ich dachte des wäre irgendwas im programm... Aufjedenfall vielen Dank für die Hilfe wenns fertig ist poste ich ein paar screenshots ma :) ansonsten meld ich mich nochmal fals was schief leuft :-)

— geändert am 23.03.2012, 17:11:38

Antworten
Sergen
  • Forum-Beiträge: 14

25.03.2012, 20:05:21 via Website

Ich will ein bilder array erstellen. Ich habe etwa versucht aber sobald ich auf deal drücke scmeißt es mich bei dem Virtual Divice wieder raus. Und beendet mein BlackJack app. ier mein code dazu.
1public void onCreate(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
3 setContentView(R.layout.main);
4 NameEingabe = (EditText) findViewById(R.id.NameEingabe);
5
6 //Buttons zuweisen
7 Deal = (Button)findViewById(R.id.Deal);
8 Deal.setOnClickListener(this);
9 Deal.setClickable(false);
10 Set = (Button)findViewById(R.id.Set);
11 Set.setOnClickListener(this);
12 Set.setClickable(false);
13 Hit = (Button)findViewById(R.id.Hit);
14 Hit.setOnClickListener(this);
15 Hit.setClickable(false);
16 Stay = (Button)findViewById(R.id.Stay);
17 Stay.setOnClickListener(this);
18 Stay.setClickable(false);
19 OK = (Button)findViewById(R.id.OK);
20 OK.setOnClickListener(this);
21 OK.setClickable(true);
22
23 //ImageArray erstellen
24 int[] cardArray = {
25 R.drawable.card00, R.drawable.card01, R.drawable.card02,
26 R.drawable.card03, R.drawable.card04, R.drawable.card05,
27 R.drawable.card06, R.drawable.card07, R.drawable.card08,
28 R.drawable.card08, R.drawable.card10, R.drawable.card11,
29 R.drawable.card12, R.drawable.card13, R.drawable.card14,
30 R.drawable.card15, R.drawable.card16, R.drawable.card17,
31 R.drawable.card18, R.drawable.card19, R.drawable.card20,
32 R.drawable.card21, R.drawable.card22, R.drawable.card23,
33 R.drawable.card24, R.drawable.card25, R.drawable.card26,
34 R.drawable.card27, R.drawable.card28, R.drawable.card29,
35 R.drawable.card31, R.drawable.card32, R.drawable.card33,
36 R.drawable.card34, R.drawable.card35, R.drawable.card36,
37 R.drawable.card37, R.drawable.card38, R.drawable.card39,
38 R.drawable.card110, R.drawable.card111, R.drawable.card112,
39 R.drawable.card210, R.drawable.card211, R.drawable.card212,
40 R.drawable.card310, R.drawable.card311, R.drawable.card312,
41 R.drawable.card010, R.drawable.card011, R.drawable.card012,};
42 }
43public void onClick(View v) {
44spieler1=(ImageView) findViewById(R.id.Spieler1);
45 if (v == Deal){
46 //Karten geben
47 Drawable image= getCard();
48 spieler1.setImageDrawable(image);
49 }
50}
51 public Drawable getCard (){
52 int n;
53 n= (int) (Math.random() * 52);
54 Drawable d =getResources().getDrawable(cardArray[0]);
55 return d;
56 }
getCard dient hierbei als zufallsgenerator der eine karte zwischen 0 und 52 wählen soll und danach dies als Drawlable zurückgeben. Dort wird es dann auf den imageView spieler1 ausgegeben. Eclipse gibt keine fehlermeldung raus. Ich habe in main.xml und string.xml nichts ergänzt.
Bitte um rat^^

Antworten
Maximilian O
  • Forum-Beiträge: 990

25.03.2012, 20:41:31 via App

Debuge deine Anwendung doch einfach, dann siehst du wo er rausfliegt.

Liebe Grüße Maximilian

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Sergen
  • Forum-Beiträge: 14

25.03.2012, 21:46:55 via Website

da kommt die linie als fehler raus danke, wusste garnet dass des geht^^
Fehler:
Drawable d =getResources().getDrawable(cardArray[0]);

und

Drawable image= getCard();

Antworten
Stefan S.
  • Forum-Beiträge: 560

26.03.2012, 07:31:09 via Website

So wie es aussieht ist dein cardArray keine globale Variable sondern wird im onCreate angelegt.
Ich kann mir vorstellen, dass du ein NullReference-Error erhälst.

Definier die cardArray als globale Variable oberhalb onCreate...

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

26.03.2012, 08:16:22 via App

Hey,
außerdem solltest du die Id aus dem Array bei der Position der Zufallsvariablen n und nicht bei 0 nehmen. Sonst kommt immer dieselbe Karte raus.
Lg Ansgar

Antworten
Stefan S.
  • Forum-Beiträge: 560

26.03.2012, 10:32:17 via Website

Ansgar M
Hey,
außerdem solltest du die Id aus dem Array bei der Position der Zufallsvariablen n und nicht bei 0 nehmen. Sonst kommt immer dieselbe Karte raus.
Lg Ansgar
Ou ja, das habe ich vergessen zu erwähnen :grin:

Antworten
Sergen
  • Forum-Beiträge: 14

26.03.2012, 16:47:47 via Website

1public class BlackJackSchuleActivity extends Activity implements OnClickListener{
2 /** Called when the activity is first created. */
3 private Button Deal;
4 private Button Set;
5 private Button Hit;
6 private Button Stay;
7 private Button OK;
8
9 public Player player = new Player("player");
10 public Player dealer = new Player("dealer");
11
12 private int einsatz;
13 private int konto;
14
15 private TextView Name;
16 private EditText NameEingabe;
17 private TextView KontoAnzeige;
18
19 private ImageView spieler1;
20 private int[] cardArray;
hab ich ja, und in onCreate weise ich die bilder zu
und die 0 steht da damit es erstmal mit einer karte funktioeniert, später setze ich da dann n ein.

Antworten
Stefan S.
  • Forum-Beiträge: 560

26.03.2012, 20:20:27 via Website

Aber dein cardArray wird nochmals im onCreate als
int [] cardArray{} erstellt und abgefüllt. Somit hat dies einen anderen Scope als dein eigentliches cardArray.

Lasst im onCreate das int[] weg.

Antworten
Sergen
  • Forum-Beiträge: 14

26.03.2012, 22:24:34 via Website

1private ImageView spieler1;
2private Integer [] cardArray = {R.drawable.card00,.....,}; //die definiere ich ganz oben wo auch die Buttons und so sind.

in onClick Methode mache folgendes
1spieler1=(ImageView)findViewById(R.id.Spieler1);
2if (v == Deal){
3 //Karten geben n= zufällige Zahl
4 int n =getCard();
5 spieler1.setImageResource(cardArray[n]);
6}
welchen Datentyp muss ich einsetzen oben anstatt Integer??? Liegt es daran, dass der den cardArray[n] nicht als richtigen Darentyp annimmt unddeswegen an der stelle rausspringt???

Antworten
Stefan S.
  • Forum-Beiträge: 560

27.03.2012, 06:56:55 via Website

Poste doch mal den ganzen Code hier.
Wieso springt er denn raus? Sagt er LogCat etwas darüber?

Antworten
Sergen
  • Forum-Beiträge: 14

27.03.2012, 08:29:02 via Website

Activity:
1package com.example.BlackJackSchule;
2
3import android.app.Activity;
4import android.app.AlertDialog;
5import android.graphics.drawable.Drawable;
6import android.os.Bundle;
7import android.view.View;
8import android.view.View.OnClickListener;
9import android.widget.Button;
10import android.widget.EditText;
11import android.widget.ImageView;
12import android.widget.TextView;
13
14public class BlackJackSchuleActivity extends Activity implements OnClickListener{
15 /** Called when the activity is first created. */
16 private Button Deal;
17 private Button Set;
18 private Button Hit;
19 private Button Stay;
20 private Button OK;
21
22 public Player player = new Player("player");
23 public Player dealer = new Player("dealer");
24
25 private int einsatz;
26 private int konto;
27
28 private TextView Name;
29 private EditText NameEingabe;
30 private TextView KontoAnzeige;
31
32 private ImageView spieler1;
33 private Integer [] cardArray = {
34 R.drawable.card00, R.drawable.card01, R.drawable.card02,
35 R.drawable.card03, R.drawable.card04, R.drawable.card05,
36 R.drawable.card06, R.drawable.card07, R.drawable.card08,
37 R.drawable.card08, R.drawable.card10, R.drawable.card11,
38 R.drawable.card12, R.drawable.card13, R.drawable.card14,
39 R.drawable.card15, R.drawable.card16, R.drawable.card17,
40 R.drawable.card18, R.drawable.card19, R.drawable.card20,
41 R.drawable.card21, R.drawable.card22, R.drawable.card23,
42 R.drawable.card24, R.drawable.card25, R.drawable.card26,
43 R.drawable.card27, R.drawable.card28, R.drawable.card29,
44 R.drawable.card31, R.drawable.card32, R.drawable.card33,
45 R.drawable.card34, R.drawable.card35, R.drawable.card36,
46 R.drawable.card37, R.drawable.card38, R.drawable.card39,
47 R.drawable.card110, R.drawable.card111, R.drawable.card112,
48 R.drawable.card210, R.drawable.card211, R.drawable.card212,
49 R.drawable.card310, R.drawable.card311, R.drawable.card312,
50 R.drawable.card010, R.drawable.card011, R.drawable.card012,};
51
52
53 @Override
54 public void onCreate(Bundle savedInstanceState) {
55 super.onCreate(savedInstanceState);
56 setContentView(R.layout.main);
57 NameEingabe = (EditText) findViewById(R.id.NameEingabe);
58
59 //Buttons zuweisen
60 Deal = (Button)findViewById(R.id.Deal);
61 Deal.setOnClickListener(this);
62 Deal.setClickable(false);
63 Set = (Button)findViewById(R.id.Set);
64 Set.setOnClickListener(this);
65 Set.setClickable(false);
66 Hit = (Button)findViewById(R.id.Hit);
67 Hit.setOnClickListener(this);
68 Hit.setClickable(false);
69 Stay = (Button)findViewById(R.id.Stay);
70 Stay.setOnClickListener(this);
71 Stay.setClickable(false);
72 OK = (Button)findViewById(R.id.OK);
73 OK.setOnClickListener(this);
74 OK.setClickable(true);
75
76
77
78 }
79
80 public void onClick(View v) {
81 if(OK==v){
82 Name =(TextView)findViewById(R.id.Name);
83 //Überprüfung Eingabe Name
84 NameEingabe = (EditText) findViewById(R.id.editText1);
85 String name = NameEingabe.getEditableText().toString();
86 if (name.length() == 0) {
87 new AlertDialog.Builder(this)
88 .setMessage(R.string.errorName)
89 .setNeutralButton(R.string.ok, null)
90 .show();
91 }
92 if(name.length()!= 0){
93 Name.setText(name);
94 OK.setVisibility(Button.INVISIBLE);
95 NameEingabe.setVisibility(View.INVISIBLE);
96 Set.setClickable(true);
97 }
98 }
99
100 if (v == Set){
101 //Einsatz auslesen
102 EditText et = (EditText)findViewById(R.id.editText2);
103 String stringEinsatz = et.getText().toString();
104 einsatz = Integer.parseInt(stringEinsatz);
105 //Kontostand auslesen
106 KontoAnzeige = (TextView)findViewById(R.id.textView2);
107 String stringKonto =KontoAnzeige.getText().toString();
108 konto= Integer.parseInt(stringKonto);
109 //Überprüfung ob Einsatz kleiner oder größer Konto ist
110 if (einsatz > konto) {
111 new AlertDialog.Builder(this)
112 .setMessage(R.string.errorEinsatz)
113 .setNeutralButton(R.string.ok, null)
114 .show();
115 }
116 else {
117 //Neuer Kontostand einlesen
118 konto= konto-einsatz;
119 stringKonto= String.valueOf(konto);
120 KontoAnzeige.setText(stringKonto);
121 Deal.setClickable(true);
122 Set.setClickable(false);
123 }
124
125 spieler1=(ImageView)findViewById(R.id.Spieler1);
126 if (v == Deal){
127 //Karten geben
128 int n =getCard();
129 spieler1.setImageResource(cardArray[n]);
130 }
131 if (v == Stay){
132
133 }
134 if (v == Hit){
135
136 }
137 }
138 }
139 public int getCard (){
140 int n;
141 n= (int) (Math.random() * 52);
142 return n;
143 }
144}
string.xml
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_name">BlackJack 1.1</string>
5 <string name="DealButton">Deal</string>
6 <string name="HitButton">Hit</string>
7 <string name="StayButton">Stay</string>
8 <string name="SetButton">Set</string>
9 <string name="errorName">Bitte geben sie ihren Namen ein. Bsp: Hans Wurst</string>
10 <string name="ok">OK</string>
11 <string name="errorEinsatz">Einsatz ist zu hoch!</string>
12
13
14
15</resources>
main.xml
1main
2<?xml version="1.0" encoding="utf-8"?>
3<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:orientation="vertical" >
7
8 <GridLayout
9 android:id="@+id/gridLayout1"
10 android:layout_width="match_parent"
11 android:layout_height="match_parent"
12 android:columnCount="35" >
13
14 <EditText
15 android:id="@+id/NameEingabe"
16 android:layout_width="148dp"
17 android:layout_column="4"
18 android:layout_columnSpan="8"
19 android:layout_gravity="right"
20 android:layout_row="0"
21 android:layout_rowSpan="2"
22 android:inputType="textPersonName" />
23
24 <TextView
25 android:id="@+id/Name"
26 android:layout_width="wrap_content"
27 android:layout_height="wrap_content"
28 android:layout_column="1"
29 android:layout_columnSpan="2"
30 android:layout_gravity="bottom"
31 android:layout_row="1"
32 android:text="Name:"
33 android:textAppearance="?android:attr/textAppearanceLarge" />
34
35 <EditText
36 android:id="@+id/editText1"
37 android:layout_column="3"
38 android:layout_columnSpan="7"
39 android:layout_gravity="fill_horizontal"
40 android:layout_row="1" >
41
42 <requestFocus />
43 </EditText>
44
45 <Button
46 android:id="@+id/OK"
47 android:layout_width="wrap_content"
48 android:layout_height="34dp"
49 android:layout_column="10"
50 android:layout_columnSpan="2"
51 android:layout_gravity="bottom"
52 android:layout_row="1"
53 android:onClick="OK"
54 android:text="OK" />
55
56 <TextView
57 android:id="@+id/textView1"
58 android:layout_column="12"
59 android:layout_gravity="left"
60 android:layout_row="1"
61 android:text="TextView" />
62
63 <ImageView
64 android:id="@+id/Dealer1"
65 android:layout_column="1"
66 android:layout_columnSpan="4"
67 android:layout_gravity="right"
68 android:layout_row="3"
69 android:src="@drawable/b2fv" />
70
71 <ImageView
72 android:id="@+id/Dealer2"
73 android:layout_column="6"
74 android:layout_columnSpan="3"
75 android:layout_row="3"
76 android:src="@drawable/b2fv" />
77
78 <ImageView
79 android:id="@+id/Spieler1"
80 android:layout_column="1"
81 android:layout_columnSpan="4"
82 android:layout_gravity="right"
83 android:layout_row="4"
84 android:src="@drawable/b2fv" />
85
86 <ImageView
87 android:id="@+id/Spieler2"
88 android:layout_column="6"
89 android:layout_columnSpan="3"
90 android:layout_row="4"
91 android:src="@drawable/b2fv" />
92
93 <Button
94 android:id="@+id/Deal"
95 android:layout_column="1"
96 android:layout_columnSpan="2"
97 android:layout_row="5"
98 android:onClick="onDealClicked"
99 android:text="Deal" />
100
101 <Button
102 android:id="@+id/Stay"
103 android:layout_column="6"
104 android:layout_columnSpan="3"
105 android:layout_row="5"
106 android:onClick="onStayClicked"
107 android:text="Stay" />
108
109 <Button
110 android:id="@+id/Hit"
111 android:layout_column="9"
112 android:layout_columnSpan="3"
113 android:layout_row="5"
114 android:onClick="onHitClicked"
115 android:text="Hit" />
116
117 <Button
118 android:id="@+id/Set"
119 android:layout_column="8"
120 android:layout_columnSpan="3"
121 android:layout_row="6"
122 android:layout_rowSpan="2"
123 android:onClick="onSetClicked"
124 android:text="Set" />
125
126 <EditText
127 android:id="@+id/editText2"
128 android:layout_width="74dp"
129 android:layout_column="11"
130 android:layout_row="6"
131 android:layout_rowSpan="2" />
132
133 <TextView
134 android:id="@+id/Konto"
135 android:layout_column="0"
136 android:layout_columnSpan="2"
137 android:layout_row="7"
138 android:text="Konto"
139 android:textAppearance="?android:attr/textAppearanceLarge" />
140
141
142
143 <TextView
144 android:id="@+id/textView2"
145 android:layout_width="78dp"
146 android:layout_column="2"
147 android:layout_columnSpan="7"
148 android:layout_gravity="left"
149 android:layout_row="7"
150 android:text="500"
151 android:textAppearance="?android:attr/textAppearanceLarge" />
152
153 <Space
154 android:layout_width="40dp"
155 android:layout_height="1dp"
156 android:layout_column="7"
157 android:layout_row="0" />
158
159 <Space
160 android:layout_width="24dp"
161 android:layout_height="1dp"
162 android:layout_column="8"
163 android:layout_row="0" />
164
165 <Space
166 android:layout_width="20dp"
167 android:layout_height="1dp"
168 android:layout_column="9"
169 android:layout_row="0" />
170
171 <Space
172 android:layout_width="36dp"
173 android:layout_height="1dp"
174 android:layout_column="10"
175 android:layout_row="0" />
176
177 <Space
178 android:layout_width="349dp"
179 android:layout_height="1dp"
180 android:layout_column="11"
181 android:layout_row="0" />
182
183 <Space
184 android:layout_width="1dp"
185 android:layout_height="26dp"
186 android:layout_column="0"
187 android:layout_row="0" />
188
189 <Space
190 android:layout_width="1dp"
191 android:layout_height="56dp"
192 android:layout_column="0"
193 android:layout_row="2" />
194
195 <Space
196 android:layout_width="1dp"
197 android:layout_height="118dp"
198 android:layout_column="0"
199 android:layout_row="3" />
200
201 <Space
202 android:layout_width="1dp"
203 android:layout_height="96dp"
204 android:layout_column="0"
205 android:layout_row="4" />
206
207 <Space
208 android:layout_width="1dp"
209 android:layout_height="67dp"
210 android:layout_column="0"
211 android:layout_row="5" />
212
213 <Space
214 android:layout_width="21dp"
215 android:layout_height="1dp"
216 android:layout_column="0"
217 android:layout_row="0" />
218
219 <Space
220 android:layout_width="14dp"
221 android:layout_height="1dp"
222 android:layout_column="3"
223 android:layout_gravity="fill_horizontal"
224 android:layout_row="0" />
225
226 <Space
227 android:layout_width="1dp"
228 android:layout_height="20dp"
229 android:layout_column="0"
230 android:layout_gravity="fill_horizontal"
231 android:layout_row="6" />
232
233 <Space
234 android:layout_width="15dp"
235 android:layout_height="1dp"
236 android:layout_column="5"
237 android:layout_row="0" />
238
239 <Space
240 android:layout_width="46dp"
241 android:layout_height="1dp"
242 android:layout_column="1"
243 android:layout_row="0" />
244 </GridLayout>
245
246</LinearLayout>
so^^ hoffe das hilft

Antworten
Markus B.
  • Forum-Beiträge: 636

27.03.2012, 09:42:52 via App

Hi, lade dein Projekt mal bitte irgendwo hoch, da das kopieren von soviel Code echt nervig ist :)

Gruß,
Markus

Antworten
Stefan S.
  • Forum-Beiträge: 560

27.03.2012, 16:06:08 via Website

Es gibt zwei eigentliche Probleme hier.
1. Dein Click-Handler für Deal wird so nie ausgeführt da der Event innerhalb vom Set abgefragt wird.
Hier musst du die Klammern ändern auf:
1if (v == Set){
2 //Einsatz auslesen
3 EditText et = (EditText)findViewById(R.id.editText2);
4 String stringEinsatz = et.getText().toString();
5 einsatz = Integer.parseInt(stringEinsatz);
6 //Kontostand auslesen
7 KontoAnzeige = (TextView)findViewById(R.id.textView2);
8 String stringKonto =KontoAnzeige.getText().toString();
9 konto= Integer.parseInt(stringKonto);
10 //�berpr�fung ob Einsatz kleiner oder gr��er Konto ist
11 if (einsatz > konto) {
12 new AlertDialog.Builder(this)
13 .setMessage(R.string.errorEinsatz)
14 .setNeutralButton(R.string.ok, null)
15 .show();
16 }
17 else {
18 //Neuer Kontostand einlesen
19 konto= konto-einsatz;
20 stringKonto= String.valueOf(konto);
21 KontoAnzeige.setText(stringKonto);
22 Deal.setClickable(true);
23 Set.setClickable(false);
24 }
25
26 spieler1=(ImageView)findViewById(R.id.Spieler1);
27 } // <-- diese hier war unterhalb vom if (v == Hit)
28 if (v == Deal){
29 //Karten geben
30 int n =getCard();
31 spieler1.setImageResource(cardArray[n]);
32 }
Nun wird der Event schon mal abgefangen.
Dann musst du folgenden Code für das Ersetzen des Bilds verwenden
1spieler1.setImageResource(cardArray[n]);

Nun klappts mit dem Wechseln auf spieler1.

Nun noch zwei Hinweise:
Hat das Device einen kleinen Schirm wird es den Set Button nie anzeigen. Am Besten eine ScrollView über Alles machen.
Dann noch ganz wichtig den Set-Wert abfangen. Gibt man hier nichts ein fliegt die Applikation einem um die Ohren :grin:

Nun viel Spass beim weitern Entwickeln

Antworten
Sergen
  • Forum-Beiträge: 14

27.03.2012, 18:44:12 via Website

War schon am verzweilfeln es geht :) jetzt muss ich kuken wie ich neue Images hinzufüge, wenn mehr karten gebraucht werden. Kann man nach links scrollen weil der bildschirm ansonsten bisle end wird.
Danke für hilfe nochmal :)

Antworten
Sergen
  • Forum-Beiträge: 14

27.03.2012, 23:07:30 via Website

So mein letztes Problem hoffe ich.
Also bei BlackJack reichen einem meistens die 2 karten am anfang net, deswegen muss ich nachträglich Images erzeugen.
Meine erste Idee war:
3 KartenImages zu machen und am anfang dann die ungenutzten INVERISIBLE zumachen. Sobald dann neue Karten gebraucht werden dan wieder sichtbar zu machen. Aber das wäre etwas blöd.
Meine zwiete Idee:
Ich mache 2 ImageArrays einmal für Spieler und Dealer. Dann definiere ich am Anfang zwei Images pro Array, da dies standart ist am anfang.
Wenn ich dann neue Images brauche erweitere ich die klasse immer weiter bis die gewünschte Anzahl erreicht ist. Ich weis nur nicht wie ich dies in der Activity reinschreiben soll, bei der ersten Idee konnte ich ja die Images einfach manuell reinziehen und die wurden dann mit porsition in GridView erstellt.
Bsp: Der Dealer soll sollange ziehen bis er entweder 21 erreicht oder 17 oder höher ist.

if (rankDealer<17){
Dealer3.setVisibility(Image.VISIBLE);
Dealer3.setImageResource(cardArray[zufallsZahl]);
rankDealer=rankDealer+rankArray[zufallsZahl]; //rankArray wo die einzelnen wertigkeiten einer Karte zugeordnet sind
}
nun das könnte ich jetzt paarmal machen für Dealer4,.... aber das wäre nicht so elegant gelöst^^
lieber wäre es mir mit sonem array da ist dann auch die Anzahl der karten nicht festgelegt.

Daraufhin kommt mein nächstes Problem, was passiert wenn der Bildschrim zu klein wird vom Emulator??? kann ich nach rechts weiter scrollen???

MfG Sergen :)

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

28.03.2012, 11:48:12 via App

Hey,
Ich gebe jetzt einfach mal meinen Senf dazu :grin:
Ich würde die App gleich etwas anders aufbauen, damit es übersichtlicher wird. Ich würde mir also 3 Objekte erstellen. Eins für den Spieler, eins für den Dealer sowie eins für eine Karte.
Dann würden diese entsprechende Methoden, etc. bekommen, sodass sie sich ordentlich verhalten. Ich habe mal 3 solche Klassengerüste geschrieben. Vielleicht helfen sie dir ja..

1public class Spieler{
2 private ArrayList<SpielKarte> mKarten = new ArrayList<SpielKarte>();
3
4 public void zieheKarte(){
5 //TODO neue, zufällige Karte zur Liste hinzufügen
6 }
7
8 public void reset(){
9 //TODO alle Karten löschen
10 }
11
12 public int getWert(){
13 //TODO Karten addiert ausgeben
14 }
15}
16
17public class Dealer{
18 private ArrayList<SpielKarte> mKarten = new ArrayList<SpielKarte>();
19
20 public void tuZug(){
21 //Karte ziehen oder nichts machen (bei ≥17)
22 }
23
24 private void zieheKarte(){
25 //TODO neue, zufällige Karte zur Liste hinzufügen
26 }
27
28 public void reset(){
29 //TODO alle Karten löschen
30 }
31
32 public int getWert(){
33 //TODO Karten addiert ausgeben
34 }
35}
36
37public class SpielKarte{
38
39 private enum KartenTyp{
40 ZWEI,DREI,VIER,FUENF,SECHS,SIEBEN,ACHT,
41 NEUN,ZEHN,BUBE,DAME,KÖNIG,ASS
42 }
43
44 private KartenTyp mKartenTyp;
45
46 public SpielKarte(KartenTyp typ){
47 mKartenTyp = typ;
48 }
49
50 public KartenTyp getKartenTyp(){
51 return mKartenTyp;
52 }
53
54 public static Spielkarte makeRandomSpielkarte(){
55 //TODO zufällige Spielkarte ausgeben. Tipp: KartenTyp.values()
56 }
57
58 public static int addiereWerte(List<SpielKarte> karten){
59 //TODO mehrere Möglichkeiten bei Assen, hier erst mit 2 rechnen, wenn über 21?
60 }
61}

Zur Ausgabe, also zur graphischen Ansicht, würde ich eine entweder eine CustomView schreiben oder einfach eine ScrollView nehmen in der ein LinearLayout sitzt, dass die ImageViews der Karten an nimmt. Dafür bräuchte man dann in der Klasse des Spielers sowie des Dealers eine zusätzliche Methode, die eine Liste von ImageViews, die ids der Bilder oder nur die Spielkartenliste ausgibt. Da müsste man dann sehen, was einem lieber ist und wo man die Bilder erzeugt, bzw. auch, wie man die Datenstrukturen und das UI voneinander trennen möchte.
Konkret für das Problem heißt das also: Views im Code erstellen. Dazu sollten sich viele Beispiele ergooglen lassen. Wenn nicht, einfach fragen :)
Lg Ansgar

Antworten
Sergen
  • Forum-Beiträge: 14

28.03.2012, 16:13:54 via Website

Danke dir, ich kuk mal wie ich so weiterkomme und sonst versuch ich doe struktur von dir.
Danke dir :)

Antworten