Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: iukhdh am 25.07.16 - 17:47:41

Titel: Sommerloch - Arcanoid mit Notes :-) - jetzt mit Spiel !
Beitrag von: iukhdh am 25.07.16 - 17:47:41
Liebes Forum,

aus einer Bierlaune heraus bin ich immer wieder mal am grübeln, wie ich Notes als Spielekonsole vergewaltigen könnte :-)

Folgende Idee:

Einfache Datenbank mit sagen wir 25 Dokumenten, von oben nach unten durchnummeriert und danach sortiert.

Angezeigt wird nur ein Feld, sagen wir mit der Länge von 40 Zeichen, welches je nach Zeile von oben nach unten so gestaltet ist, dass sich ein Spielfeld ergibt, also z.B. in dieser Form (verkleinert dargestellt)

Code
#      xxxx      xxxx   #
#                       #
#               o       #
#          _____        #    (= Zeile 25)  


# ist der Spielfeldrand
xxx sind die abzuschiessenden Hindernisse
o  ist der Ball
___ ist der Schläger


Mit zwei Aktionsbuttons (links oder rechts) ist es ein leichtes, den Schläger nach links oder rechts rutschen zu lassen, indem man je nach Button die Leerzeichen vor dem Schläger um eins erhöht oder verringert, und so den Wert des Feldes anpasst.

Funktioniert.

Nun bräuchte ich eine Idee, wie ich den Ball fliegen lasse.

Grundsätzlich denke ich an eine Matrix (25,40) bei der ich den Ball hin und her schiebe, das ist mit variablen Winkeln eine Sache mit SIN und COS, und umwandeln der einzelnen Matrixwerte.

Wenn der Ball also nach oben fliegt, ist er in dem einen Zeitabschnitt z.B. bei Punkt 20,20, beim nächsten dann bei 19,20 ...

Entsprechend werden dann die einzelnen Felder in den entsprechenden Zeilen berechnet, die Ansicht aktualisiert - fertig :-)

Aber:

Wo programmiere ich das? Ich dachte im ersten Moment an einen Agenten, der in einem gewissen Zeitabstand x die Berechnungen durchführt. Da man die Agenten aber nicht im Sekundenabstand laufen lassen kann, wäre das ganze etwas lahm.

Wo dann?  Im Datenbankscript?
Gibt es irgendwo die Möglichkeit, Code dauerhaft im Hintergrund ablaufen zu lassen, und nicht nur zu bestimmten Anlässen, wie z.B. im Queryopen Event?

Ich brauche letztlich eine Schleife um a) den Schläger zu bewegen, b) den Ball zu bewegen und dabei c) auf Kollision mit Hindernis oder Spielfeldrand zu reagieren.

Ich bin gespannt auf Ideen und Anregungen. Und falls schon jemand sowas realisiert hat, her damit :-)

Thomas


 
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 25.07.16 - 19:34:40
Nette Idee :)

Mit einem NotesTimer kann im Sekundentakt Code ausgeführt werden, aber ich würde das ganze in einer Maske mit einer Tabelle umsetzen. In der Maske kann mit JavaScript ein Refresh in Millisekundenbereich durchgeführt werden (AutoReload setzen nicht vergessen), zudem dürfte das Script schneller laufen und aktualisieren als Code in einer View mit mehreren Dokumenten.
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 26.07.16 - 17:04:14
An die Maske mit Tabelle hab ich auch schon gedacht und mal mit einer 10 x 10 Tabelle angefangen.

Aber irgendwie kam mir das dann doch nicht nerdig genug vor, irgendwie scheint mir die Vergewaltigung einer Ansicht weitaus witziger

 :)

OK, Stichwort lautet also NotesTimer. Muss ich mir anschauen

Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 29.07.16 - 11:54:25
OK,

NotesTimer im Sekundentakt tut zwar schon ansatzweise das, was ich will, aber doch (gääähn) recht langsam :-)

Wird wahrscheinlich ein seeeeehr gemütliches Spiel  ;D

Aber zum Erarbeiten der Grundlagen auf  jedenfall mal ganz OK :-) Der Ball fliegt schonmal bis zum Rand und wieder zurück, nun kommen die Feinarbeiten.

Falls jemand eine Idee hat, wie man etwas schneller eine Ansicht aktualisieren kann, wäre ich dankbar :-)


Hmm, kann man zwei Notestimer nebeneinander starten? ggf um 0,5 sec versetzt?
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 31.07.16 - 23:46:52
2 oder mehr Notestimer werden sich schwer synchronisieren lassen ;)
Da wird man um einen JS Timer nicht drum herum kommen, damit wäre die Maske der Favorit und letztendlich wäre das mit einer eingebetteten Ansicht realisierbar oder mittels Frameset, aber das müsste man noch evaluieren.

Mein Favorit wäre nach wie vor die Tabelle. Große Tabellen lassen sich recht einfach und fehlerfrei via DXL Manipulation/Generierung erstellen. Vielleicht kann man eine Schnittstelle schaffen die beides unterstützt? Wenn ja würde ich die Tabelle übernehmen 8)
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jo@chim am 01.08.16 - 09:44:03
http://www.nsftools.com/tips/NotesTips.htm#games (http://www.nsftools.com/tips/NotesTips.htm#games)
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 01.08.16 - 11:10:29
Acanoid oder Space Invaders ist aber nicht dabei ;)
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 01.08.16 - 15:07:27
Verständnisfrage:

Wenn ich innerhalb eines NotesTimer Intervalls z.B. zweimal eine Ansicht refreshe, geschieht das dann schon zweimal innerhalb des Intervalls?

Ich verstehe den Notestimer so, dass der nach x-Sekunden einen Code ausführt.
Aber innerhalb des Codes könnte ich doch nicht nur einen Refresh starten, sondern mehrere hintereinander?

Oder hab ich da einen Denkfehler?
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 01.08.16 - 15:16:37
Wenn der Code läuft kann man keine Eingaben tätigen, deshalb macht bei einer Code-Ausführung nur ein Refresh wirklich Sinn.
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 01.08.16 - 17:07:57
Aber ich kann Feldinhalte berechnen, diese speichern und dann die Ansicht refreshen, und dann nochmals Feldinhalte neu berechnen und wieder refreshen :-)

Ich brauch in dem Moment keine Eingabe :-)
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 01.08.16 - 17:18:36
Wann und wie soll der Schläger bewegt werden?

Der Code sollte so schnell wie es nur geht ausgeführt werden, um keine Zeitverzögerungen hervorzurufen. Deshalb finde ich ja die Ansicht so ungünstig ;)
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 02.08.16 - 11:40:41
Der Schläger kann ruhig im Sekundentakt bewegt werden, denke ich. Mal schauen.

Ich gebe es offen zu, dass sich meine Programmierkenntnisse im Notes auf Formelsprache und etwas Script beschränken. Grundsätzlich hört sich die Sache mit JS natürlich optimal an, aber da stoße ich an meine Grenzen.

Außerdem bleibe ich dabei ... So ein Spiel in einer Ansicht zu realiseren ist sowas von doof, das muss man einfach versuchen   ;D


Und notfalls muss ich mir ein etwas langsameres Spiel aussuchen, Schach z.B.  :)
(wenn ich nur wüsste, wie man ein Schachspiel programmiert  ;) )
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 02.08.16 - 18:02:46
der JS Timer in einer Maske geht so:

1. Erstelle eine LS-Schaltfläche/Button (keine Maskenaktion), dieser kann auch verborgen sein. Gebe diesem einen eindeutigen Namen, letzter Reiter bei den Feldeigenschaften - das ist der HTML-Tab, im folgenden Beispiel heißt dieser: NotesAction

2. Maskenereignis JS-Header, Typ Client nicht vergessen, mit folgendem Code:
Code
var COUNT = 300;
function runNotesAction() {
  try {
      document.forms[0].NotesAction.click();	
      setTimeout ("runNotesAction()",COUNT);
  } catch (e) {}
}
die Variable COUNT enthält den Abstand in Millisekunden und könnte zur Steuerung der Spielgeschwindigkeit verwendet werden :)

3. Maskenereignis onLoad, Typ Client nicht vergessen, mit folgendem Code:
Code
 try {
	 setTimeout ("runNotesAction()",COUNT);
  } catch (e) {}	 

Mehr braucht man an JS an dieser Stelle nicht, die Schaltfläche enthält deinen LS-Code Aufruf, wenn dieser sehr lange braucht dann ruckelt es ... dehalb solltest du die Zeit deiner LS-Funktion messen. Für so etwas habe ich mir eine kleine Hilfsklasse geschrieben, welcher in Millisekunden misst und ausgibt:
Code
Class times
	stc As Variant
	ftc As Variant
	tps  As Variant
	Sub new
		stc = Getthreadinfo(6)
	End Sub
	Function getTime As String
		Dim t As Variant
		ftc = Getthreadinfo(6) 
		tps = Getthreadinfo(7)
		t = (ftc - stc) / tps 
		getTime =  Format(t * 1000,"0,000") 
	End Function
End Class  
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 11.08.16 - 08:58:14
Jetzt komm ich nochmal mit dem Notestimer ...

Ich habe jetzt mal folgende Vorgehensweise getestet:

Notestimer auf 5 Sekunden - löst folgende Aktionen aus:

Position des Balls wird berechnet - Ansicht wird aktualisiert
Sleep 1

Position des Balls wird erneut berechnet - Ansicht wird aktualisiert
Sleep 1

Position des Balls wird nochmals berechnet - Ansicht wird aktualisiert


Nach meinem Verständnis müsste der Code nun innerhalb der 5 Sekunden dreimal die Ansicht aktualisieren, sodass der Ball 3 Positionen bewegt wird. Er bewegt sich auch, aber die Ansichtsaktualisierung erfolgt nur einmal, dh. er hüpft über drei Positionen ohne dass man die Zwischenschritte sieht.

Woran könnte das liegen? Wird während der 5 Sekunden der Event zwar berechnet, aber nur das Endergebnis des Codes nach 5 Sekunden präsentiert?
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 11.08.16 - 10:20:45
und wenn der Timer auf 1 Sekunde gestellt wird und nur einmal die Ballposition pro Lauf berechnet wird, wie sieht es dann aus?

Ansicht aktualisieren machst du mit uiWorkspace.viewRefresh?
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 11.08.16 - 10:36:19
Timer auf 1 Sekunde und nur einmal berechnen klappt einwandfrei, halt laaaaaangsam.

Die 5 Sekunden hab ich nur zum Testen verwendet, eigentlich will ich das nachher schon schneller haben. Aber mit diesen langen Einstellungen sehe ich halt, dass nach einer Sekunde eben kein Refresh erfolgt.

Den mache ich in der Tat mit uiWorkspace.viewrefresh.
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 11.08.16 - 10:41:10
Aber "sleep 1" ist doch wie eine Sekunde warten, also NotesTimer mit 1.

Eventuell kann man eine Maske mit eingebetteter Ansicht verwenden, in Verbindung mit einem JS-Timer?
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 11.08.16 - 11:15:09
Ja klar ist Sleep 1 eine Sekunde warten.

Ich wollte doch nur testen, ob wirklich nur einmal refresht wird.
Deshalb der Notestimer auf 5 Sekunden. Wenn ich innerhalb der 5 Sekunden nur einmal die Ballposition berechne, hüpft der Ball alle 5 Sekunden ein Feld weiter.

Meine Hoffnung war, dass ich innerhalb dieser 5 sec. testweise 3 Berechnungen im Abstand von 1 Sekunde durchführe,  und dabei 3mal refreshe. Das komische ist, die Berechnungen werden natürlich 3 mal durchgeführt, wobei der Ball jeweils ein Feld weiterhüpft. Aber es wird nur einmal refresht, und zwar entweder am Ende der 5 Sekunden, oder am Anfang des nächsten Intervalls. Der Ball hüpft also erst nach 5 Sekunden 3 Felder weiter, anstatt jeweils nach einer Sekunde um ein Feld.

Später dachte ich mir den Notestimer auf 1 Sekunde zu stellen, und z.B. mit sleep 0.2 zu arbeiten. Nur zum Testen ist mir das zu schnell.

Aber im Grunde frage ich mich halt gerade, warum die 3 refreshs nicht ausgeführt werden und ob das an der Arbeitweise des Notestimers liegt.
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: jBubbleBoy am 11.08.16 - 11:59:46
Am NotesTimer liegt es nicht, wenn dann liegt es an der Script-Ausführung. Man kann den NotesTimer auch während der Ausführung kurzzeitig anhalten:
NotesTimer.enable = false / true

Aber wenn das Script läuft können ja keine Nutzeraktionen ausgeführt werden, wäre dann nur eine Animation, da erkenne ich den Sinn noch nicht so richtig  ...
Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: iukhdh am 16.08.16 - 13:05:59
Liebes Forum,

Dank der Hilfe von jBubbleBoy, der mir einen JS-Timer gebastelt hat, ist das Unmögliche wirklich geworden:

Endlich hat Lotus Notes seine wahre Bedeutung als Spielekonsole erlangt.  ;D  ;D  ;D  8)
Auf Basis dieser Grundlagenforschung sollten weitere Spiele eigentlich kein Problem sein.
Wer liefert ein Autorennen?  ;D


Zum Spiel selber:
Es gilt 200 Hindernisse zu treffen, dann stoppt das Spiel und ihr könnt Euren Highscore hier als Bildschirmcopy einstellen.

Wenn der Ball den Schläger nicht trifft, gibt es Abzüge.

Die DB gibt es hier im Anhang zum download

Titel: Re: Sommerloch - Arcanoid mit Notes :-)
Beitrag von: sral am 16.08.16 - 13:28:35
Großes Kino !!!  8)
Titel: Re: Sommerloch - Arcanoid mit Notes :-) - jetzt mit Spiel !
Beitrag von: iukhdh am 17.08.16 - 11:29:08
Danke  ;D
Titel: Re: Sommerloch - Arcanoid mit Notes :-) - jetzt mit Spiel !
Beitrag von: Flachmann am 18.08.16 - 10:15:26
Sehr cool gemacht.   :D

Danke für den Spaß!
Titel: Re: Sommerloch - Arcanoid mit Notes :-) - jetzt mit Spiel !
Beitrag von: Thomas Schulte am 18.08.16 - 11:53:22
Cool gemacht. Eine anmerkung habe ich aber. wenn der balken unten nicht trifft müsste das Spiel abbrechen. Das tut es im Moment nicht. Zumindest bei mir nicht.
Titel: Re: Sommerloch - Arcanoid mit Notes :-) - jetzt mit Spiel !
Beitrag von: iukhdh am 18.08.16 - 12:31:39
Nein, dann gibt es Minuspunkte bei der Gesamtwertung. Das wollte ich erst so programmieren, aber dann wäre das Spielvergnügen doch etwas kurz. daher die Abzüge. Das Spiel geht solange, bis 200 Hindernisse weg sind. Und dann zählt die Gesamtwertung ;-)