Entwickler-Ecke

Sonstiges (Delphi) - Programm für Psychologische Untersuchung


DarkJiN - Di 23.11.10 16:21
Titel: Programm für Psychologische Untersuchung
Hallo liebe community,

Ich muss zugeben ich bin nicht wirklich vom Fach, also Porgrammieren und Informatik, aber ich benötige für eien psychologische Untersuchung ein Programm.
Folgendes hab ich zusammenbekommen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
unit Unit1;

interface


uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    E_rad1: TEdit;
    E_rad2: TEdit;
    E_rad3: TEdit;
    B_start: TButton;
    B_ende: TButton;
    Kontostand: TLabel;
    E_konto: TEdit;
    RB_1: TRadioButton;
    RB_2: TRadioButton;
    RB_3: TRadioButton;
    RB_4: TRadioButton;
    RB_5: TRadioButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    B_einwurf: TButton;
    Ti_raeder: TTimer;
    Ti_spiel1: TTimer;
    B_stopp1: TButton;
    B_stopp3: TButton;
    B_stopp2: TButton;
    Ti_raeder2: TTimer;
    Ti_raeder3: TTimer;
    procedure B_endeClick(Sender: TObject);
    procedure Ti_raederTimer(Sender: TObject);
    procedure B_startClick(Sender: TObject);
    procedure Ti_spiel1Timer(Sender: TObject);
    procedure B_einwurfClick(Sender: TObject);
    procedure B_stopp1Click(Sender: TObject);
    procedure Ti_raeder2Timer(Sender: TObject);
    procedure Ti_raeder3Timer(Sender: TObject);
    procedure B_stopp2Click(Sender: TObject);
    procedure B_stopp3Click(Sender: TObject);
  private

    { Private-Deklarationen }
    procedure  werte_aus;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.B_endeClick(Sender: TObject);
begin
close
end;

procedure TForm1.Ti_raederTimer(Sender: TObject);
var z : byte;
begin
z:=random(5)      ;
if z  =  0 then e_rad1.text := '*' ELSE e_RAD1.text := IntToStr (Z) ;
END;

procedure TForm1.B_startClick(Sender: TObject);
begin
E_konto.text := IntToStr (StrToInt (E_konto.Text)-1);
Ti_spiel1.Enabled := true;
Ti_raeder2.Enabled := true;
Ti_raeder3.Enabled := true;
Ti_raeder.Enabled := true;
B_start.Enabled := false;
RB_1.Checked := false;
RB_2.Checked := false;
RB_3.Checked := false;
RB_4.Checked := false;
RB_5.Checked := false;
end;

procedure TForm1.Ti_spiel1Timer(Sender: TObject);
begin
Ti_raeder.Enabled := false;
Ti_raeder2.enabled := false ;
Ti_raEder3.enabled := false ;
Ti_spiel1.Enabled := false;
werte_aus;
if E_konto.text <> '0'
then B_start.Enabled := true;
end;

procedure TForm1.werte_aus;
var r1, r2, r3 :string;
gewinn         :byte;
begin
     r1 := E_rad1.Text;
     r2 := E_rad2.Text;
     r3 := E_rad3.Text;
     if (r1 = '*'and (r2='*'and (r3 ='*')
     then begin gewinn := 8; RB_1.checked := true end
     else if (r1 = r2) and (r2 = r3)
          then begin gewinn := 4; RB_2.checked := true end
          else if    ((r1 = '*'and (r2 = '*'))
                  or ((r1 = '*'and (r3 = '*'))
                  or ((r2 = '*'and (r3 = '*'))
                then begin gewinn := 3; RB_3.Checked := true end
                else if r2 = '*'
                     then begin gewinn := 2; RB_4.Checked := true end
                     else begin gewinn := 0; RB_5.Checked := true end;
     E_konto.Text := IntToStr(StrToInt(E_konto.Text) + gewinn)
     end;
     procedure TForm1.B_einwurfClick(Sender: TObject);
begin
 E_konto.text := IntToStr (StrToInt (E_konto.Text)+1);
end;

procedure TForm1.B_stopp1Click(Sender: TObject);
begin
Ti_raeder.Enabled := false;
B_start.Enabled := false;
werte_aus;

end;

procedure TForm1.Ti_raeder2Timer(Sender: TObject);
var z : byte  ;
begin
z:=random(5)  ;
if z  =  0 then e_rad2.text := '*' ELSE e_RAD2.text := IntToStr (Z) ;
end;

procedure TForm1.Ti_raeder3Timer(Sender: TObject);
var z : byte ;
begin
z:=random(5)  ;

if z  =  0 then e_rad3.text := '*' ELSE e_RAD3.text := IntToStr (Z) ;
end;

procedure TForm1.B_stopp2Click(Sender: TObject);
begin
Ti_raeder2.Enabled := false;
B_start.Enabled := false;
werte_aus;

end;

procedure TForm1.B_stopp3Click(Sender: TObject);
begin
Ti_raeder3.Enabled := false;
B_start.Enabled := true;
werte_aus;

end;

end.



das soll ich Spiele Automat sein. Immo funktioniert dieser einwandfrei. Ich will aber das jedes mal dasselbe Ergebnis rauskommt. Jede VPN soll genau 2 Euro gewinnen.
Ich hab versucht einige Zeilen zu ändern unzwar sind 2 Sterne nötig um 2 Euro zu gewinnen.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Ti_raederTimer(Sender: TObject);
var z : byte;
begin
z:= 0      ;
if z  =  0 then e_rad1.text := '*' ELSE e_RAD1.text := IntToStr (Z) ;
END;


genau dasselbe bei

Delphi-Quelltext
1:
procedure TForm1.Ti_raeder2Timer(Sender: TObject);                    


bei procedure TForm1.Ti_raeder2Timer(Sender: TObject); hab ich nur z:= 5 geändert.

Problem jetzt erscheint sobald ich auf start drücke sofort "*"
Ich möchte, dass die VPN trotzdem noch denken sie würden wirklich spielen.

Außerdem habe ich versucht z:= random (5) ;
beizubehalten und die Prozedur so zu ändern :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Ti_raederTimer(Sender: TObject);
var z : byte;
begin
z:= random (5) ;
if z  =  0 then e_rad1.text := '*' ELSE e_RAD1.text := * ;
END;


auch das klappt leider nicht..

Könnt mir jemand helfen?
danke

Moderiert von user profile iconMartok: Delphi-Tags gesetzt


Xion - Di 23.11.10 17:12

1. :welcome:

2. Fasse mal deinen Code in [delphi ] ... [/delphi] Tags ein. Dann erkennt man auch was ;)

3. Das ist ziemlich viel Code und keiner hat Lust sich das alles erstmal durchzudenken. ;) Kannst du so nen ungefähren Abriss geben, was das Programm macht? Bzw. was die Versuchsperson machen soll?


DarkJiN - Di 23.11.10 23:22

ja klar.
Das ist ein Glückspiel Automat.
Man drückt auf start, zahlen sollen durchlaufen udn für jedes feld gibts nen stopp knopf.
Wie son einarmiger bandit.
Der Witz ist jetzt, dass jede VPN 2 Euro gewinnt. Immer, aber denken soll sie, spiele wirklich und hätte gewonnen.

Dann solln Popup auftauchen in dem gefragt wird ob sie den Gewinn von 2 Euro spenden wollen oder behalten wollen.
Das kann ich aber auch dannach persöhnlich fragen.

Wichtig ist, dass jede VPN 2 Euro gewinnt und sie denkt es wäre wirklich gespielt worden.


Xion - Mi 24.11.10 00:57

Achja, jetzt durchblick ich auch den Code. Da du mit random arbeitest, ist das ganz günstig. Wenn du auf Stop drückst, muss er das Feld einfach auf * setzen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.B_stopp1Click(Sender: TObject);
begin
Ti_raeder.Enabled := false;
B_start.Enabled := false;
E_rad1.Text:='*';
werte_aus;
end;


Um es nicht ganz so auffällig zu machen könnte man auch zwischen dem "auf * setzen" und dem "werte aus" auch noch eine kurze Zeitspanne (1/4sec oder so) einbauen, damit die Versuchsperson dann auch wirklich sieht, achja, da ist ja der * den ich jetzt angehalten hab. ;)


Martok - Mi 24.11.10 02:40

user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Um es nicht ganz so auffällig zu machen könnte man auch zwischen dem "auf * setzen" und dem "werte aus" auch noch eine kurze Zeitspanne (1/4sec oder so) einbauen, damit die Versuchsperson dann auch wirklich sieht, achja, da ist ja der * den ich jetzt angehalten hab. ;)

Wenn mich meine UI-Design-Weisheiten hier nicht verlassen, sogar bis zu 1/3sec. Aber das weiß ein "professioneller" Psychologe sicher besser als ich ;)

Finde ich aber auch beachtenswert: wenn die VPN merkt, dass der Gewinn gefaked ist, dürfte die Sache ziemlich nach hinten losgehen. Möglicherweise nicht alles gewinnen lassen, sondern 3/4 läufen oder so?

EDIT&PS: aber ich will natürlich in keine Messmethoden reinreden, nur so Gedanken ;)


Xion - Mi 24.11.10 10:38

Wenn du per Timer gleichmäßig umschaltest, hast du natürlich ein großes Problem.

Die Versuchsperson klickt auf Stop und knapp vorher hat es auf was andres umgeschaltet. Wenn jetzt plötzlich wieder ein Stern da steht dann merkt jeder, dass das gefaked ist ;) Am besten du verstellst das Intervall des Timer nach jeder Umstellung, dann hat die Versuchsperson so keine Chance was zu merken.