Autor Thema: Sommerloch - Arcanoid mit Notes :-) - jetzt mit Spiel !  (Gelesen 9759 mal)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
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


 
« Letzte Änderung: 16.08.16 - 13:43:09 von iukhdh »
Thomas von der IuK

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #1 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.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #2 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

Thomas von der IuK

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #3 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?
« Letzte Änderung: 29.07.16 - 11:58:26 von iukhdh »
Thomas von der IuK

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #4 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)
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #6 am: 01.08.16 - 11:10:29 »
Acanoid oder Space Invaders ist aber nicht dabei ;)
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #7 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?
Thomas von der IuK

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #8 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.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #9 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 :-)
Thomas von der IuK

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #10 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 ;)
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #11 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  ;) )
« Letzte Änderung: 02.08.16 - 11:51:36 von iukhdh »
Thomas von der IuK

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #12 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  
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #13 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?
Thomas von der IuK

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #14 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?
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #15 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.
Thomas von der IuK

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #16 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?
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #17 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.
Thomas von der IuK

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #18 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  ...
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Sommerloch - Arcanoid mit Notes :-)
« Antwort #19 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

« Letzte Änderung: 16.08.16 - 23:22:54 von iukhdh »
Thomas von der IuK

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz