Erstes Spiel (TicTacToe)
Übersicht

ShyioxBetreff: Erstes Spiel (TicTacToe) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, ich hab mit BB heute angefangen und hab mir die Tutorials erstmal durchgelesen, und hab mir gedacht ich fang mit was einfachem an, und da bin ich auf TicTacToe gekommen.
Das "Minigame" ist jetzt fertig und funktioniert komplett, jetzt hätte ich von euch gerne noch Kritik was ich an dem Code besser schreiben könnte: (den Code kann sich natürlich jeder kopieren ;D) BlitzBasic: [AUSKLAPPEN] Graphics 220, 275, 16, 0 |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo erstmal !
Wäre aber schön wenn du uns noch die Bilddateien mitschicken würdest... Code sieht auf den ersten Blick schonmal gut aus, guck ihn mir aber erst an wenn ich die Bilder habe ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für das erste Spiel schonmal sehr gut, aber ich hab dennoch n paar Dinge gefunden, die man verbessern kann:
1.) Die Auflösung von 220*275 im Vollbildmodus wird auf der einen oder anderen Graphikkarte Schwierigkeiten bereiten. Nimm "Standardauflösungen" wie zB 800*600, 1024*768 usw. Oder was ich fast noch mehr empfehlen würde: Verwende den Fenstermodus (letzter Parameter bei Graphics ![]() 2.) Der Klassiker, deine Verwendung von Flip. An sich richtig das mitn backBuffer und Flip, aber wenn dann gleich richtig, hier steht wie es richtig gehört 3.) Ebenso ein Klassiker, deine Abfrage von MouseHit ![]() Ansonsten wären da nur noch Kleinigkeiten, wie zB: -) Mann kann sich die Zeile "MaskImage img_mark, 0, 0, 0" sparen, schwarz wird standardmäßig maskiert -) DrawBlock ![]() Aber wirklich ned schlecht fürs Erste! Du hast vermutlich schon Programmiererfahrung, oder? mfG, Christoph. EDIT @ Xeres: Da sind wir uns einig ![]() Die Farbtiefe von 16Bit wird im Fenstermodus zwar ignoriert, aber das ändert ja ned wirklich viel. Weder am Aussehen (das wird höchstens besser) noch an der Performance (da die meisten GraKas eh besser mit 32Bit zurecht kommen). |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
- Zuletzt bearbeitet von Eingeproggt am Fr, Okt 08, 2010 0:45, insgesamt 2-mal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] Graphics 220, 275, 16, 0 Das ist irgendwie etwas unsinnig, denn: Modus 0 ist (wie in der OH nach zu lesen) "Fenstermodus bei Debug, sonst Vollbild" - Welche Grafikkarte stellt 220x275 im Vollbild da? Ich würde da auf den Fenstermodus 2 setzen. Ob die Farbtiefe im Fenster überhaupt beachtet wird, kann ich grad' nicht mal sagen... Ein bisschen Lesestoff, den du umsetzen solltest: Hurra, 100 % Auslastung Wie kann ich Mausklicks richtig abfragen ? Sieht ansonsten ja nicht schlecht aus, also: weitermachen ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Shyiox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wow, so viele Antworten ![]() @ToeB: Bilder sind unterwegs... @Eingeproggt: 1) 0 = Vollbild? o.O Bei mir zeigt der da Fenstermodus ._. 2) Wird morgen gelesen ![]() 3) Joar... kann ich nich viel zu sagen, ich probiers mal anders... PS: Ein wenig schon ja ^^ Wenn du evtl. Garry's Mod spielst das gibt es ne Ingame Programmiersprache gennant Expression2 (fast genauso wie Lua aufgebaut) die kann ich schon fast auswendig >.> Aber BB ist doch fürn Anfänger zwar einfach, aber an der Umsetzung in ein Spiel/Programm happerts ein bisschen ![]() @Xeres: Selbes wie bei Eingeproggt... Wusste garnich das das Vollbild is ^^ ----- Spiel-Dateien ----- Mfg Shyiox PS: Eine Frage hätte ich jetzt noch, könnte mir das mal jemand zu ner .exe machen? Hab leider nur die Demo im Moment ![]() |
||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
WoW das hast du nicht wirklich alles in 1 Tag gelernt? | ||
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also wenn er, wie er ja offen zugibt, schon vorher programmiererfahrung gesammelt hat, ist das durchaus in einem tag lern- und machbar denke ich
zum programm selbst kann ich mich meinen vorrednern nur anschließen - bis auf die paar genannten dinge recht ordentlicher code, auch wenn man Code: [AUSKLAPPEN] mathbufferX1=ent_field(0,0)*ent_field(1,0)*ent_field(2,0) mathbufferX2=ent_field(0,1)*ent_field(1,1)*ent_field(2,1) mathbufferX3=ent_field(0,2)*ent_field(1,2)*ent_field(2,2) mathbufferY1=ent_field(0,0)*ent_field(0,1)*ent_field(0,2) mathbufferY2=ent_field(1,0)*ent_field(1,1)*ent_field(1,2) mathbufferY3=ent_field(2,0)*ent_field(2,1)*ent_field(2,2) mathbufferZ1=ent_field(0,0)*ent_field(1,1)*ent_field(2,2) mathbufferZ2=ent_field(0,2)*ent_field(1,1)*ent_field(2,0) sicher geschickter hätte lösen können mit schleifen etc |
||
Shyiox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja bei dem mathbuffer is mir leider nix anderes eingefallen >.>
Aber auf jedenfall geht das Spiel ![]() @Raiden93: Ja ich bin vorhher schonmal auf BB aufmerksam geworden, hab kurz mir die ersten 2 Tutorials oder so durchgelesen, hatte dann aber nicht weitergemacht, und jetzt bin ich mal alles durchgegegangen... So und jetzt nochmal zu meiner Frage, gibt es irgendwie ne Möglichkeite das ich aus dem ganzen Zeug ne .exe machen kann? Oder geht das in der Demo nicht? Wenn nicht geht, könnte mir dann jemand daraus ne .exe machen? (aber vorher oben Graphics auf Fenster machen >.<) Mfg Shyiox PS: Die Bildchen sind in der Arbeitszeit übrigens inbegriffen... alles selfmade ![]() |
||
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier die .exe...
EDIT:Ok Danke für den Hinweis... |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
- Zuletzt bearbeitet von Sephka am Fr, Okt 08, 2010 14:12, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Die Demo kann keine Exe kompilieren, das ist richtig.
2. Wer kompilieren möchte, sollte sich Blitzbasic kaufen. Fremdkompilieren ist hier nicht gern gesehen. Siehe Forensatzung. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Shyiox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm ok schade ![]() Hab jetzt nochmal paar Verbesserungen gemacht, z.B. hab ich erstmal den Bug rausgenommen, das wenn man mit dem letzten zug gewinnt das über dem player wins, nochmal Undecided steht... Und ich hab reingemacht welcher spieler dranne ist, und wie der punktestand ist ![]() Und natürlich hab ich außerdem eure Tipps umgesetzt (auslastung nun nichtmehr auf 100% - framrate=30) Hier der Code: Code: [AUSKLAPPEN] Graphics 220, 275, 16, 2
SetBuffer BackBuffer() AppTitle "Tic Tac Toe" time_flip=CreateTimer(30) img_background = LoadImage("images/background.bmp") img_mark = LoadAnimImage("images/mark.bmp",58,58,0,3) MaskImage img_mark, 0, 0, 0 Dim ent_field(2,2) Global info_player=1 Global game=1 While Not KeyHit (1) Cls act_mousehit=MouseHit(1) DrawBlock img_background,0,0 Color 0,0,255 Text 180,243,wins1 Color 0,0,0 Text 190,243,":" Color 255,0,0 Text 200,243,wins2 If info_player=1 Then Color 0,0,255 Text 18,243,info_player ElseIf info_player=2 Then Color 255,0,0 Text 18,243,info_player EndIf For x=0 To 2 For y=0 To 2 DrawImage img_mark,11+(12*x+58*x),11+(12*y+58*y),ent_field(x,y) If ent_field(x,y)=0 Then If RectsOverlap(MouseX(),MouseY(),1,1,11+(12*x+58*x),11+(12*y+58*y),58,58) Then If MouseDown(1) And game=1 If act_mousehit ent_field(x,y)=info_player If info_player=1 Then info_player=2 ElseIf info_player=2 Then info_player=1 EndIf EndIf EndIf EndIf EndIf Next Next If win>0 Then Color 0,255,0 Text 60,103,"Player "+win+" wins!" game=0 EndIf mathbufferX1=ent_field(0,0)*ent_field(1,0)*ent_field(2,0) mathbufferX2=ent_field(0,1)*ent_field(1,1)*ent_field(2,1) mathbufferX3=ent_field(0,2)*ent_field(1,2)*ent_field(2,2) mathbufferY1=ent_field(0,0)*ent_field(0,1)*ent_field(0,2) mathbufferY2=ent_field(1,0)*ent_field(1,1)*ent_field(1,2) mathbufferY3=ent_field(2,0)*ent_field(2,1)*ent_field(2,2) mathbufferZ1=ent_field(0,0)*ent_field(1,1)*ent_field(2,2) mathbufferZ2=ent_field(0,2)*ent_field(1,1)*ent_field(2,0) If mathbufferX1=1 And win<>1 Or mathbufferX2=1 And win<>1 Or mathbufferX3=1 And win<>1 Or mathbufferY1=1 And win<>1 Or mathbufferY2=1 And win<>1 Or mathbufferY3=1 And win<>1 Or mathbufferZ1=1 And win<>1 Or mathbufferZ2=1 And win<>1 Then win=1 wins1=wins1+1 ElseIf mathbufferX1=8 And win<>2 Or mathbufferX2=8 And win<>2 Or mathbufferX3=8 And win<>2 Or mathbufferY1=8 And win<>2 Or mathbufferY2=8 And win<>2 Or mathbufferY3=8 And win<>2 Or mathbufferZ1=8 And win<>2 Or mathbufferZ2=8 And win<>2 Then win=2 wins2=wins2+1 EndIf summe=ent_field(0,0)+ent_field(0,1)+ent_field(0,2)+ent_field(1,0)+ent_field(1,1)+ent_field(1,2)+ent_field(2,0)+ent_field(2,1)+ent_field(2,2) If summe=13 And win=0 Or summe=14 And win=0 game=0 Color 0,255,0 Text 70,103,"Undecided!" EndIf If RectsOverlap(MouseX(),MouseY(),1,1,1,225,220,50) And MouseDown(1) And MouseHit(1) Then For a=0 To 2 For b=0 To 2 ent_field(a,b)=0 Next Next game=1 win=0 EndIf WaitTimer time_flip Flip Wend End |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na bitte, geht doch flott voran, aber es gibt immer was zu lernen ![]() Zu den 100% CPU: Sicher nicht mehr? Weil du hast ein einziges Zeichen vergessen, nämlich müsste man Flip 0 in Verbindung mit dem Timer schreiben. Kleiner Unterschied, große Wirkung ^^ Wie BBPro2 schon schrieb lässt sich sicher einiges noch vereinfachen, ich weise dich mal auf dein neues Konstrukt hin, welches man kürzer schreiben könnte, es geht um diesen Teil hier: BlitzBasic: [AUSKLAPPEN] If mathbufferX1=1 And win<>1 Or mathbufferX2=1 And win<>1 Or mathbufferX3=1 And win<>1 Or mathbufferY1=1 And win<>1 Or mathbufferY2=1 And win<>1 Or mathbufferY3=1 And win<>1 Or mathbufferZ1=1 And win<>1 Or mathbufferZ2=1 And win<>1 Then Da kann man die Abfrage von win "heraus nehmen" und kommt zu dieser, verschachtelten Abfrage: BlitzBasic: [AUSKLAPPEN] If win<>1 Then Sollte an sich gehn, pobiert hab ichs aber leider nicht. Weiterhin viel Spass! Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn dein Spiel seine Perfektion erreicht hat, könntest du dich ja Mal mit Funktionen vertraut machen und eine KI programmieren. Bei TicTacToe ist das relativ leicht, da man man einfach bruteforce alle Möglichkeiten durchgehen kann. Am einfachsten ist es, eine Funktion zu schreiben, die sich für jeden möglichsen Zug selbst aufruft, wobei eine Kopie des Spielfeldes verändert und bei Ablauf der Funktion wieder zurückgesetzt wird. Hab sowas gemacht, als ich in Java angefangen hab. Es wahr sehr knifflich und hat Spaß gemacht. | ||
1 ist ungefähr 3 |
primero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nettes Spiel, und schon sehr gut für en ersten Tag. Alle Achtung.
hier mal meine Verbesserungsvorschläge: (1) definiere alle deine Variablen am Programmanfang, evtl. mit kleinem beschreibungstext für was sie verwendet werden. besonders in größeren und komplexeren Programme ist es hilfreich wenn man sich das angewöhnt hat und keine Variable im hauptprog. definiert. z.B. Code: [AUSKLAPPEN] ...
Dim ent_field(2,2) Global info_player=1 Global game=1 [b]Global act_mousehit ;fragt ab ob li. Maustaste gedrückt wird[/b] ... (2) Deine Überprüfung der Mausposition zu einer Schaltfläche mutet mir etwas kompliziert an. sparsammer wäre es, wenn du in einer Variablen die Mausposition zu beginn der schleife speicherst und dann nur prüfst ob diese inerhalb eines gewissen gebietes sind. berechnungen würde ich zudem nicht inerhalb des if-satzes ausführen. später entwickelt man länger und komplexere Formeln und ist dann froh wenn diese übersichtlich aufgeführt werden. daher definiere ich die gesuchten x und y positionen immer vorher, notfals sogar in mehreren schritten. Alt Code: [AUSKLAPPEN] If RectsOverlap(MouseX(),MouseY(),1,1,11+(12*x+58*x),11+(12*y+58*y),58,58) Then
neu: Code: [AUSKLAPPEN] while .....
mausx=mousex() mausy=mousey() ....... x=11+(12*x+58*x) y=11+(12*y+58*y) if mausx>=x and mausx<=x-58 and mausy>=y and mausy<=y-58 .... wend (3) prüfe ob du etwas doppelt abfragst. von der Geschw. her ist es nicht zwingend erforderlich, sorgt aber für eine bessere übersicht: alt Code: [AUSKLAPPEN] If MouseDown(1) And game=1
If act_mousehit neu Code: [AUSKLAPPEN] if act_mousehit=1 then
(4) manches lässt sich deutlich kürzer schreiben, womit mehr Übersicht gewonnen wird alt Code: [AUSKLAPPEN] If info_player=1 Then
info_player=2 ElseIf info_player=2 Then info_player=1 EndIf neu Code: [AUSKLAPPEN] info_player=3-info_player
alt Code: [AUSKLAPPEN] mathbufferX1=ent_field(0,0)*ent_field(1,0)*ent_field(2,0)
mathbufferX2=ent_field(0,1)*ent_field(1,1)*ent_field(2,1) mathbufferX3=ent_field(0,2)*ent_field(1,2)*ent_field(2,2) mathbufferY1=ent_field(0,0)*ent_field(0,1)*ent_field(0,2) mathbufferY2=ent_field(1,0)*ent_field(1,1)*ent_field(1,2) mathbufferY3=ent_field(2,0)*ent_field(2,1)*ent_field(2,2) mathbufferZ1=ent_field(0,0)*ent_field(1,1)*ent_field(2,2) mathbufferZ2=ent_field(0,2)*ent_field(1,1)*ent_field(2,0) If mathbufferX1=1 And win<>1 Or mathbufferX2=1 And win<>1 Or mathbufferX3=1 And win<>1 Or mathbufferY1=1 And win<>1 Or mathbufferY2=1 And win<>1 Or mathbufferY3=1 And win<>1 Or mathbufferZ1=1 And win<>1 Or mathbufferZ2=1 And win<>1 Then win=1 wins1=wins1+1 ElseIf mathbufferX1=8 And win<>2 Or mathbufferX2=8 And win<>2 Or mathbufferX3=8 And win<>2 Or mathbufferY1=8 And win<>2 Or mathbufferY2=8 And win<>2 Or mathbufferY3=8 And win<>2 Or mathbufferZ1=8 And win<>2 Or mathbufferZ2=8 And win<>2 Then win=2 wins2=wins2+1 EndIf neu Code: [AUSKLAPPEN] dim mathbuffer(10)
.... if win=0 then mathbuffer(1)=ent_field(0,0)*ent_field(1,0)*ent_field(2,0) mathbuffer(2)= .... .... for n=1 to 8 if mathbuffer(n)=1 then win=1 wins1=wins1+1 endif if mathbuffer(n)=8 then win=2 wins2=wins2+1 endif next endif letzter Code erreicht etwa die länge von deinem, hat aber den Vorteil dass er nicht als ellenlange Schlange über den Bildschirm wandert. das erleichtert dann auch die Fehlersuche. (5) zuletzt noch, schreib einfach noch kommentare rein, auch für die die dir helfen ist es einfacher sich zurecht zu finden. Code: [AUSKLAPPEN] If RectsOverlap(MouseX(),MouseY(),1,1,1,225,220,50) And [b]MouseDown(1) And MouseHit(1)[/b] Then For a=0 To 2 For b=0 To 2 ent_field(a,b)=0 Next Next game=1 win=0 EndIf Das Fettgedruckte ist wieder doppelt gemoppelt. wenn li. Taste gedrückt wird wurde sie gleichzeitig betätigt! hoffe das hilft etwas. |
||
Shyiox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
und das nennt man dann: Optimierung ![]() das man alles so schreibt wie du, kommt mit der zeit... ich kenn das nur zugut... nurmal son beispiel von expression2 was ich geschrieben habe ![]() Code: [AUSKLAPPEN] @name [Shy-Tec]_ECS_v1
@outputs AimEnt:entity AimCol:vector A B OKU SelectMode [Cmd Commands Command PropStack Undo Prop Select]:array if (first()) { Commands[1,string]="stack" Commands[2,string]="setrot" Commands[3,string]="translate" Commands[4,string]="rotate" Commands[5,string]="undo" Commands[6,string]="select_on" Commands[7,string]="select_off" Commands[8,string]="kill" } runOnTick(1) runOnChat(1) Syntax = "-e_" SynNum = Syntax:length() OLS = owner():lastSaid() OKU = owner():keyUse() LS = lastSaid() AimEnt = owner():aimEntity() AimCol = owner():aimEntity():getColor() if ( chatClk(owner()) & OLS:left(SynNum) == Syntax) { #hideChat(1) CmdSub = OLS:sub(OLS:find(Syntax)+SynNum) Cmd = CmdSub:explode(" ") # --- STACKEN --- if (Cmd[1,string]==Commands[1,string] & inrange(Cmd[2,string]:toNumber(),0,50) & AimEnt:toString()!="(null)") { Undo:unshiftNumber(Undo[1,number]+Cmd[2,string]:toNumber()) for (I=1,clamp(Cmd[2,string]:toNumber(),1,50)) { PropStack:pushVector(vec(Cmd[3,string]:toNumber(),Cmd[4,string]:toNumber(),Cmd[5,string]:toNumber())*I) PropStack:pushAngle(ang(Cmd[6,string]:toNumber(),Cmd[7,string]:toNumber(),Cmd[8,string]:toNumber())) PropStack:pushEntity(owner():aimEntity()) } } elseif (Cmd[1,string]!=Commands[1,string]) { } elseif (Cmd[2,string]:toNumber()>50) {print("You cannot stack more than 50 props!")} elseif (Cmd[2,string]:toNumber()<=0) {print("You cannot stack 0 or negativ amount of props!")} # --- SETROT --- if (Cmd[1,string]==Commands[2,string]) { if (SelectMode) { for (I=0,Select:count()) { Select[I,entity]:setAng(ang(Cmd[2,string]:toNumber(),Cmd[3,string]:toNumber(),Cmd[4,string]:toNumber())) } print("Selected props have been setroted to angles "+Cmd[2,string]+" "+Cmd[3,string]+" "+Cmd[4,string]) } elseif (AimEnt:toString()!="(null)") { AimEnt:setAng(ang(Cmd[2,string]:toNumber(),Cmd[3,string]:toNumber(),Cmd[4,string]:toNumber())) print("Prop has been setroted to angles "+Cmd[2,string]+" "+Cmd[3,string]+" "+Cmd[4,string]) } } # --- TRANSLATEN --- if (Cmd[1,string]==Commands[3,string]) { if (SelectMode) { for (I=0,Select:count()) { Select[I,entity]:setPos(Select[I,entity]:pos()+vec(Cmd[2,string]:toNumber(),Cmd[3,string]:toNumber(),Cmd[4,string]:toNumber())) } print("Selected props have been translated to "+Cmd[2,string]+" "+Cmd[3,string]+" "+Cmd[4,string]) } elseif (AimEnt:toString()!="(null)") { #holoCreate(1,owner():pos(),vec(0.1,0.1,0.1) #holoEntity(1):setTrails(5,5,5,"trails/laser",vec(255,0,0),255) #holoPos(1,AimEnt:pos()) AimEnt:setPos(AimEnt:pos()+vec(Cmd[2,string]:toNumber(),Cmd[3,string]:toNumber(),Cmd[4,string]:toNumber())) print("Prop has been translated to "+Cmd[2,string]+" "+Cmd[3,string]+" "+Cmd[4,string]) #holoDelete(1) } } # --- ROTATE --- if (Cmd[1,string]==Commands[4,string]) { if (SelectMode) { for (I=0,Select:count()) { Select[I,entity]:setAng(Select[I,entity]:angles()+ang(Cmd[2,string]:toNumber(),Cmd[3,string]:toNumber(),Cmd[4,string]:toNumber())) } print("Selected props have been rotated "+Cmd[2,string]+" "+Cmd[3,string]+" "+Cmd[4,string]) } elseif (AimEnt:toString()!="(null)") { AimEnt:setAng(AimEnt:angles()+ang(Cmd[2,string]:toNumber(),Cmd[3,string]:toNumber(),Cmd[4,string]:toNumber())) print("Prop has been rotated "+Cmd[2,string]+" "+Cmd[3,string]+" "+Cmd[4,string]) } } # --- UNDO --- if (Cmd[1,string]==Commands[5,string]) { for (I=Undo[1,number],Undo[2,number]+1,-1) { Prop[I,entity]:propDelete() Prop:remove(I) A-- } Undo:shift() Cmd[1,string]="" print("Last Stack has been undone") } # --- SELECTMODE --- if (Cmd[1,string]==Commands[6,string]) { SelectMode=1 } if (Cmd[1,string]==Commands[7,string]) { SelectMode=0 } # --- KILL --- if (Cmd[1,string]==Commands[8,string]) { if (SelectMode) { for (I=0,Select:count()) { Select[I,entity]:propDelete() } print("Selected props have been killed") } elseif (AimEnt:toString()!="(null)") { AimEnt:propDelete() print("Prop has been killed") } } if (Cmd[1,string]=="stack" & inrange(Cmd[2,string]:toNumber(),0,50) & AimEnt:toString()!="(null)") { print("Prop has stacked "+Cmd[2,string]+" times to "+Cmd[3,string]+" "+Cmd[4,string]+" "+Cmd[5,string]) timer("StackDelay",10) Cmd[1,string]="" } } if (SelectMode) { if (OKU&$OKU) { for (I=0,Select:count()) { if (AimEnt==Select[I,entity]) { hint("Prop deselected",2) AimEnt:setColor(vec(255,255,255),255) Select:remove(I) B=Select:count() } elseif (I==Select:count()) { hint("Prop selected",2) if (AimEnt:toString()!="(null)") { B++ Select[B,entity]=AimEnt AimEnt:setColor(vec(255,0,0),128) } } } } for(I=1,Select:count()) { if (Select[I,entity]:toString()=="(null)") { Select:remove(I) B=Select:count() } } } if (PropStack:count() & clk("StackDelay")) { StackVec=PropStack:shiftVector() StackAng=PropStack:shiftAngle() StackEnt=PropStack:shiftEntity() A++ Prop[A,entity]=propSpawn(StackEnt,StackEnt:pos()+StackVec,StackAng,1) timer("StackDelay",260) } for (I=1,Prop:count()) { if (Prop[I,entity]:toString()=="(null)") { Prop:remove(I) A-- } } |
||
primero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mhmh
stimmt schon. nur die Übersichtlichkeit ist eine trainigsangelegenheit. also sollte man damit mögl. früh beginnen. dann treten fehler wie If RectsOverlap(MouseX(),MouseY(),1,1,1,225,220,50) And MouseDown(1) And MouseHit(1) Then nicht mehr ganz so häufig auf. B3d, soweit ich weis BB allgemein, hat den großen Vorteil dass du Kommentare setzen kannst. diese vergrößern dein Projekt als .exe später nicht, helfen aber ungemein beim Proggen. einfach " Code ;kommentar" hilft auch denen die deinen Code interpretieren müssen. mein Rat, fang mögl. früh damit an. (das ist noch nicht mal eine optimierung, sondern eine reine Hilfestellung) eine Funktion schaut bei mir in etwa so aus (benutze ich regelmäßig, schaue sie mir aber nur sehr selten an): BlitzBasic: [AUSKLAPPEN]
Ich denke mal jeden ist die Funktionsweise dieses Codes recht schnell klar. Nun ja. Ich behaubte ja nicht dass du nicht Proggen kannst oder keine Ahnung hast. Ich habe vor BB mit Turbo Pascal geproggt. einige Angewohnheiten von da nahm ich mit, manchmal zum guten, manchmal zum schlechten. Aber du hast recht, meine Vorschläge laufen alle in richtung kosmetik. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group