Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 13.05.05 18:29 
Hallo, ich hab mich jetzt nach dem thread kürzlich mal dazu entschlossen einen "richtigen" namegenerator zu schreiben, so einen, wie ich mal hatte, jetzt habe ich aber das Problem, dass der 2. Buchstabe manchmal der gleiche wie der erste und zudem auch noch großgeschrieben ist, woran kann das liegen ?
Ich hab auch schon überall lowercase eingefügt bei der Abfrage, aber sie schlägt fehl ?
(fängt der string jetzt doch bei 0 an ?) :roll:
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:
procedure TForm1.Button1Click(Sender: TObject);
const
  vokale: array [1..5] of string = ('a', 'e', 'i', 'o', 'u');
  konsonanten: array [1..21] of string = ('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z');
var
  Buchstabe, str: string;
  laenge, i, j, k, l, m, n, b, c: integer;
begin
  randomize;
  str := '';
  laenge := strtoint(edit2.Text);
  for i := 1 to laenge do
    begin
      //Zufall
      b := random(10) + 1;

      //Wahrscheinlichkeiten manipulieren  
      if length(str) > 0 then
        begin
          //Bei Konsonanten
          if (b < 5) then
            for j := 1 to high(konsonanten) do
              if lowercase(str[i - 1]) = konsonanten[j] then
                begin
                  b := random(5) + 6;
                  break;
                end;

          //Bei Vokalen
          if (b > 5) then
            for j := 1 to high(vokale) do
              if lowercase(str[i - 1]) = vokale[j] then
                begin
                  b := random(5) + 1;
                  break;
                end;
        end;

      //Anfangsbuchstaben (uppercase)
      if length(str) <= 0 then
        begin
          if (b > 5) then
            Buchstabe := uppercase(vokale[random(5) + 1]);
          if (b < 5) then
            Buchstabe := uppercase(konsonanten[random(21) + 1]);
        end;

      //Restliche Buchstaben (lowercase)
      if length(str) > 0 then
        begin
          if (b > 5) then
            Buchstabe := vokale[random(5) + 1];
          if (b < 5) then
            Buchstabe := konsonanten[random(21) + 1];
        end;

      //Nachträgliche Buchstaben Verbesserungen (Wahrscheinlichkeit fast immer = 0)
      if length(str) > 0 then
        begin
          //Nach einem x keine Konsonanten zulassen
          if lowercase(str[i - 1]) = 'x' then
            for k := 1 to high(konsonanten) do
              if Buchstabe = konsonanten[k] then
                begin
                  Buchstabe := vokale[random(5) + 1];
                  break;
                end;
          //Nach einem q kommt immer ein u
          if lowercase(str[i - 1]) = 'q' then
            Buchstabe := 'u';

          //Es kommen selten/nie 2 Konsonanten/Vokale hintereinander
          if lowercase(str[i - 1]) = Buchstabe then
            begin
              //Vokale
              for l := 1 to high(vokale) do
                if lowercase(str[i - 1]) = vokale[l] then
                  repeat
                    Buchstabe := vokale[random(5) + 1];
                  until
                    lowercase(str[i - 1]) <> Buchstabe;
              //Konsonanten
              for m := 1 to high(konsonanten) do
                if lowercase(str[i - 1]) = vokale[m] then
                  begin
                    c := random(3) + 1;
                    if c < 3 then
                      repeat
                        Buchstabe := konsonanten[random(5) + 1];
                      until
                        lowercase(str[i - 1]) <> Buchstabe;
                  end;

            end;

          //Nach qu kommen nur vokale
          if (lowercase(str[i - 1]) = 'u') and (lowercase(str[i - 2]) = 'q') then
            for n := 1 to high(konsonanten) do
              if lowercase(str[i - 1]) = konsonanten[n] then
                Buchstabe := vokale[random(5) + 1];
        end;
      //Buchstaben setzen
      str := str + Buchstabe;
    end;
  edit1.text:= str;  
end;

end.
feivel3333
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190

W7
Delphi XE prof
BeitragVerfasst: Fr 13.05.05 20:00 
Könntest du, bevor ich das debugge, mal sagen, wofür dieser NameGenerator gut ist? Was macht der? Ich habe auf die Schnelle den Thread nicht gefunden. Aber eine kurze Erklärung hilft sicher weiter.

Danke, Gruß, AS
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Sa 14.05.05 12:57 
der name generator erzeugt zufalls namen, in dem anderen thread ging es darum, namen aus mehreren Teilen, die man vorher festlegt, durch zufall zu generieren.

Da aber dort die Auswahl begrenzt und die Länge nicht Auswählbar war, wollte ich einen Namengenerator schreiben der Namen nach bestimmten Kriterien erstellt, sodass sie einigermaßen gut zu lesen sind. (ich hatte mal so ein programm) :wink:
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 14.05.05 13:08 
Ich würde den ersten Buchstaben ausserhalb der schleife erstellen lassen, so dass er mit Sicherheit der einzige große Buchstabe ist. Alternativ könnte man (ich weis, ist unfein) per stringreplace nochmal am ende nach dem ersten Buchstaben mal 2 suchen, und ihn durch den ersten buchstaben mal 1 ersetzen. Edit1.Text:=StringReplace(Edit1.Text,Edit1.Text[1]+Edit1.Text[1], Edit1.Text[1],[]);
Ich weis, ist eine unfeine Methode, aber naja.

Ich finde die sache echt goil :D Macht spass, sich immer einen Namen generieren zu lassen und ihn dann laut vorzulesen, weil die klingen echt total witzig :D Haben was lateinisches manchmal :D
Generator hat folgendes geschrieben:

Erec
Axete
Bunegovu
Ukdeyepikeac
Ianakob
Bolozemeguw
Aqeouosueudd
Zefahuz

:shock: :lol:

edit:Oha mist! hab meine StringReplace eingefügt, dabei kam dann DER name hier raus (einer von 40 Namen, die alle normal waren oO)
EEErusefger
... o .... kkkk??????

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Sa 14.05.05 13:14 
danke, ich werds außerhalb der schleife machen 8)
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Sa 14.05.05 13:16 
der fehler besteht immer noch und manchmal kommt jetzt garnischt raus :shock:

Wie kann das denn angehen ? :?


und hast du wirklick diesen namen erhalten:
Zitat:

Aqeouosueudd

weil eigentlich ist es nicht möglich, dass nach einem q ein anderer Buchstabe als ein u kommt :(

so hab ich das mit dem großbuchstaben behoben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
      //Buchstaben setzen
      if length(str) > 0 then
        Buchstabe := lowercase(Buchstabe);
      str := str + Buchstabe;

Aber es folgen immer noch 2 Vokale aufeinander, obwohl verboten, hm ma schauen,
ok es darf ja mal zb ein doppel A auftauchen, aber ich hab die wahrscheinlichkeit dafür etwas niedriger gemacht, jetzt scheint alles zu funzen (bissl an den wahrscheinlichkeiten drehen und die ergebnisse fallen anders aus)
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:
procedure TForm1.Button1Click(Sender: TObject);
const
  vokale: array [1..5] of string = ('a', 'e', 'i', 'o', 'u');
  konsonanten: array [1..21] of string = ('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z');
var
  Buchstabe, str: string;
  laenge, i, j, k, l, m, n, b, c: integer;
begin
  randomize;
  str := '';
  laenge := strtoint(edit2.Text);
  for i := 1 to laenge do
    begin
      //Zufall
      b := random(10) + 1;

      //Wahrscheinlichkeiten manipulieren  
      if length(str) > 0 then
        begin
          //Bei Konsonanten
          if (b < 5) then
            for j := 1 to high(konsonanten) do
              if lowercase(str[i - 1]) = konsonanten[j] then
                begin
                  b := random(5) + 6;
                  break;
                end;

          //Bei Vokalen
          if (b > 5) then
            for j := 1 to high(vokale) do
              if lowercase(str[i - 1]) = vokale[j] then
                begin
                  b := random(5) + 1;
                  break;
                end;
        end;

      //Anfangsbuchstaben (uppercase)
      if length(str) <= 0 then
        begin
          if (b > 5) then
            Buchstabe := uppercase(vokale[random(5) + 1]);
          if (b < 5) then
            Buchstabe := uppercase(konsonanten[random(21) + 1]);
        end;

      //Restliche Buchstaben (lowercase)
      if length(str) > 0 then
        begin
          if (b > 5) then
            Buchstabe := vokale[random(5) + 1];
          if (b < 5) then
            Buchstabe := konsonanten[random(21) + 1];
        end;

      //Nachträgliche Buchstaben Verbesserungen (Wahrscheinlichkeit fast immer = 0)
      if length(str) > 0 then
        begin
          //Nach einem x keine Konsonanten zulassen
          if lowercase(str[i - 1]) = 'x' then
            for k := 1 to high(konsonanten) do
              if Buchstabe = konsonanten[k] then
                begin
                  Buchstabe := vokale[random(5) + 1];
                  break;
                end;
          //Nach einem q kommt immer ein u
          if lowercase(str[i - 1]) = 'q' then
            Buchstabe := 'u';

          //Es kommen selten 2 Konsonanten/Vokale hintereinander
          if lowercase(str[i - 1]) = Buchstabe then
            begin
              //Vokale
              for l := 1 to high(vokale) do
                if lowercase(str[i - 1]) = vokale[l] then
                  begin
                    c := random(4) + 1;
                    if c < 3 then
                      repeat
                        Buchstabe := vokale[random(5) + 1];
                      until
                        lowercase(str[i - 1]) <> Buchstabe;
                  end;
              //Konsonanten
              for m := 1 to high(konsonanten) do
                if lowercase(str[i - 1]) = vokale[m] then
                  begin
                    c := random(4) + 1;
                    if c < 3 then
                      repeat
                        Buchstabe := konsonanten[random(5) + 1];
                      until
                        lowercase(str[i - 1]) <> Buchstabe;
                  end;

            end;

          //Nach qu kommen nur vokale
          if (lowercase(str[i - 1]) = 'u') and (lowercase(str[i - 2]) = 'q') then
            for n := 1 to high(konsonanten) do
              if lowercase(str[i - 1]) = konsonanten[n] then
                Buchstabe := vokale[random(5) + 1];
        end;
      //Buchstaben setzen
      if length(str) > 0 then
        Buchstabe := lowercase(Buchstabe);
      str := str + Buchstabe;
    end;
  edit1.text:= str;  
end;

jetzt kann es aber passieren, dass der Anfangsbuchstabe klein ist, ich glaube die Fehler resultieren daraus, dass length ein falsches Ergebnis zurück liefert

erneut verbessert:
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:
procedure TForm1.Button1Click(Sender: TObject);
const
  vokale: array [1..5] of string = ('a', 'e', 'i', 'o', 'u');
  konsonanten: array [1..21] of string = ('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z');
var
  Buchstabe, str: string;
  laenge, i, j, k, l, m, n, b, c, z: integer;
begin
  randomize;
  listbox1.clear;
  for z := 1 to strtoint(edit3.text) do
    begin
      str := '';
      laenge := strtoint(edit2.Text);
      for i := 1 to laenge do
        begin
          //Zufall
          b := random(10) + 1;

          //Wahrscheinlichkeiten manipulieren
          if length(str) > 0 then
            begin
              //Bei Konsonanten
              if (b < 5) then
                for j := 1 to high(konsonanten) do
                  if lowercase(str[i - 1]) = konsonanten[j] then
                    begin
                      b := random(5) + 6;
                      break;
                    end;

              //Bei Vokalen
              if (b > 5) then
                for j := 1 to high(vokale) do
                  if lowercase(str[i - 1]) = vokale[j] then
                    begin
                      b := random(5) + 1;
                      break;
                    end;
            end;

          //Buchstaben setzen
          if (b = 5) then
            repeat
              b := random(10) + 1;
            until
              (b <> 5);  
          if (b > 5) then
            Buchstabe := vokale[random(5) + 1];
          if (b < 5) then
            Buchstabe := konsonanten[random(21) + 1];

          //Nachträgliche Buchstaben Verbesserungen (Wahrscheinlichkeit fast immer = 0)
          if length(str) > 0 then
            begin
              //Nach einem x keine Konsonanten zulassen
              if lowercase(str[i - 1]) = 'x' then
                for k := 1 to high(konsonanten) do
                  if Buchstabe = konsonanten[k] then
                    begin
                      Buchstabe := vokale[random(5) + 1];
                      break;
                    end;
              //Nach einem q kommt immer ein u
              if lowercase(str[i - 1]) = 'q' then
                Buchstabe := 'u';

              //Es kommen selten 2 Konsonanten/Vokale hintereinander
              if lowercase(str[i - 1]) = Buchstabe then
                begin
                  //Vokale
                  for l := 1 to high(vokale) do
                    if lowercase(str[i - 1]) = vokale[l] then
                      begin
                        c := random(6) + 1;
                        if c < 5 then
                          repeat
                            Buchstabe := vokale[random(5) + 1];
                          until
                            lowercase(str[i - 1]) <> Buchstabe;
                      end;
                  //Konsonanten
                  for m := 1 to high(konsonanten) do
                    if lowercase(str[i - 1]) = vokale[m] then
                      begin
                        c := random(6) + 1;
                        if c < 5 then
                          repeat
                            Buchstabe := konsonanten[random(5) + 1];
                          until
                            lowercase(str[i - 1]) <> Buchstabe;
                      end;

                end;

              //Nach qu kommen nur vokale
              if (lowercase(str[i - 1]) = 'u') and (lowercase(str[i - 2]) = 'q') then
                for n := 1 to high(konsonanten) do
                  if lowercase(str[i - 1]) = konsonanten[n] then
                    Buchstabe := vokale[random(5) + 1];
            end;
          //Buchstaben setzen
          if length(str) >= 1 then
            Buchstabe := lowercase(Buchstabe);
          if length(str) < 1 then
            Buchstabe := uppercase(Buchstabe);
          str := str + Buchstabe;
        end;
      listbox1.items.add(str);
    end;
    memo1.lines := listbox1.Items;
end;

ergebnis bei der einstellung 6 lang und anzahl 50:
Zitat:

Abujud
Ahagez
Ahawaf
Ahawel
Aluyai
Atouyo
Avabez
Avedog
Damape
Dofere
Dujuig
Ebosiw
Edesim
Ejekow
Emalel
Eneyak
Eowole
Ezeyip
Fecimi
Fifuti
Fokaet
Gidube
Gigxok
Gocaje
Ijiyoy
Ileube
Irapec
Itixob
Ituvij
Iwufor
Mefitu
Naofaf
Nedama
Ogemim
Onoxir
Pamuso
Temawi
Tuviyu
Tzimef
Uaraeb
Ubivat
Uovuil
Uxesuk
Wogpue
Xeroso
Yeniqu
Yeyuka
Yezove
Zafoba
Zuruja

Passables Ergebnis, ist da noch n Fehler drin, wenn nich, kann ich ja zumachen 8)