Autor Beitrag
DarkJiN
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 23.11.10 16:21 
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:

ausblenden volle Höhe 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.


ausblenden 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
ausblenden 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 :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: 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?

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
DarkJiN Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: 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.

ausblenden 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. ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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 ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: 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.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)