• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Sprüchegenerator mit Zeitbeschränkung

Lucy

Neues Mitglied
Hallo!

Ich bin relativ neu in dem Metier der Websiteerstellung, mein Grundwissen ist also sehr gering, wirklich sehr sehr gering..
nut.gif

Aber ich hab eine Frage und ihr könnt mir vielleicht helfen, sie zu lösen..
Also:
Für meinen Freund möchte ich eine Website programmieren, in der Sprüche meiner Wahl angezeigt werden.
Entweder jeweils random oder, dass sie nummeriert durchlaufen. Also sobald die Website geladen ist, wird in einem Kasten ein Spruch angezeigt.
Alles steht bis jetzt, bis auf die Sprüche eben.

Allerdings wünsch ich mir die Bedingung, das pro Tag nur ein Spruch geladen werden darf, das heißt 1/24h.
Jetzt bräuchte ich Codes oder Ideen, wie ich daran gehen kann.
Ich habs geschafft, die Sprüche random bei jedem erneuten Laden der Seite anzeigen zu lassen (via JS übrigens), nur den Rest eben nicht...

Würde mich über Hilfe freuen
LG
Lucy
 
Willkommen im Forum.

Hier ein Ansatz für eine reine JS-Lösung mit einem seedbaren "Random" Number Generator. Gibt für heute den ganzen Tag Nachricht "Q" zurück, morgen den ganzen Tag "W" und so weiter. Es ist allerdings Ziehen mit Zurücklegen und ich kann nicht sagen, wie "gut" die Verteilung ist.

Die Ergebnisse sind zudem komplett vorhersagbar.

Andere Lösungen würden wohl eine serverseitige Scriptsprache wie PHP benötigen.

HTML:
<!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>New</title>

<script type="text/javascript">
/**
 * @see http://stackoverflow.com/questions/424292/how-to-create-my-own-javascript-random-number-generator-that-i-can-also-set-the-s/424445#424445
 */
function RNG(seed) {
  // LCG using GCC's constants
  this.m = 0x100000000; // 2**32;
  this.a = 1103515245;
  this.c = 12345;

  this.state = seed ? seed : Math.floor(Math.random() * (this.m-1));
}
RNG.prototype.nextInt = function() {
  this.state = (this.a * this.state + this.c) % this.m;
  return this.state;
}
RNG.prototype.nextFloat = function() {
  // returns in range [0,1]
  return this.nextInt() / (this.m - 1);
}
RNG.prototype.nextRange = function(start, end) {
  // returns in range [start, end): including start, excluding end
  // can't modulu nextInt because of weak randomness in lower bits
  var rangeSize = end - start;
  var randomUnder1 = this.nextInt() / this.m;
  return start + Math.floor(randomUnder1 * rangeSize);
}
RNG.prototype.choice = function(array) {
  return array[this.nextRange(0, array.length)];
}

/**
 * @see http://javascript.about.com/library/bldayyear.htm
 */
Date.prototype.getDOY = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
} 

var messages = [
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
    'G',
    'H',
    'I',
    'J',
    'K',
    'L',
    'M',
    'N',
    'O',
    'P',
    'Q',
    'R',
    'S',
    'T',
    'U',
    'V',
    'W',
    'X'
];

window.onload = function()
{
    var day     = new Date(),
        rng     = new RNG(day.getDOY()),
        message = messages[rng.nextRange(0, messages.length)];

    document.getElementById('test')
            .appendChild(document.createTextNode(message));
};
</script>

    </head>

    <body>
        <div id="test"></div>
    </body>

</html>
 
Heeey!
Erstmal vielen Dank, das scheint ja super zu laufen.. habs gerade mal getestet! :)
Kurze Frage zur genauen Funktionsweise:
Nach was richtet sich es jetzt, wann der Spruch wechselt? Seh ich das richtig, nach dem Kalenderdatum?
Und wie genau ist das mit dem "Zurücklegen" gemeint? :O
 
Nach der Nummer des Tages im Kalenderjahr (heute etwa 314 für den 314. Tag). Die ist der Seed-Wert für das RNG-Objekt. Das Objekt generiert zu jedem Seed-Wert die immer identische Abfolge pseudozufälliger Zahlen (hoffe ich zumindest, ich habe den Code eben nur schnell aus einem Suchergebnis kopiert). Das heißt, wenn ich 314 übergebe, bekomme ich eine bestimmte Folge von Zahlen, wenn ich 315 übergebe, bekomme ich eine andere Folge von Zahlen und so weiter.

„Ziehen mit Zurücklegen“ bedeutet, dass ein Element mehrfach aus dem Topf gezogen werden kann, auch wenn noch nicht alle anderen Elemente mindestens einmal gezogen wurden. Oder anschaulicher: Wenn heute „Q“ gezogen wird, besteht für morgen wieder dieselbe Chance von 1/24, dass „Q“ gezogen wird. In 24 Ziehungen müssen also nicht zwangsläufig 24 verschiedene Elemente gezogen werden.
 
Hmmm, alles klar. Das heißt aber trotzdem, ich habe jeden Tag die Chance auf einen anderen Spruch, das werd ich einfach mal die nächsten Tage über testen.
Auf jeden Fall vielen, vielen lieben Dank!!
 
Seit ich die Variablen ersetzt hab durch die Sprüche, läuft es nicht mehr... :x

HTML:
<!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>New</title>

<script type="text/javascript">
/**
 * @see How to create my own JavaScript Random Number generator that I can also set the seed - Stack Overflow
 */
function RNG(seed) {
  // LCG using GCC's constants
  this.m = 0x100000000; // 2**32;
  this.a = 1103515245;
  this.c = 12345;

  this.state = seed ? seed : Math.floor(Math.random() * (this.m-1));
}
RNG.prototype.nextInt = function() {
  this.state = (this.a * this.state + this.c) % this.m;
  return this.state;
}
RNG.prototype.nextFloat = function() {
  // returns in range [0,1]
  return this.nextInt() / (this.m - 1);
}
RNG.prototype.nextRange = function(start, end) {
  // returns in range [start, end): including start, excluding end
  // can't modulu nextInt because of weak randomness in lower bits
  var rangeSize = end - start;
  var randomUnder1 = this.nextInt() / this.m;
  return start + Math.floor(randomUnder1 * rangeSize);
}
RNG.prototype.choice = function(array) {
  return array[this.nextRange(0, array.length)];
}

/**
 * @see Day of Year Date Method
 */
Date.prototype.getDOY = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
} 

var messages = [
    'Liebe ist mein Glück mit dir zu teilen.',
    'Es war, ist und wird perfekt sein, mein Liebling!'
    'Liebe ist wochenlanges Warten, bis wir uns wiedersehen.',
    'Day and night I long for you.',
    'Ich liebe dich so sehr wie Winnie Puh seinen Honig! <3',
    'Liebe ist zu wissen, dass ich nur bei dir geborgen bin.',
    'Du bist meine Welt, ohne dich bin ich nichts! Ich liebe dich, Schatz! <3',
    'Liebe ist das Geschenk der eigenen Person an eine andere <br/>- ein Geschenk, das nicht zum Verlust führt, sondern zur Erfüllung.',
    'Ich wollte dir nur mal eben sagen, dass Du das Größte für mich bist!'
    'Liebe ist plötzlich festzustellen, dass ich ohne dich nicht sein kann.',
    'Omnia vincit amor. – Liebe besiegt alles!<br/> (selbst die Entfernung, die uns so oft trennt.. <3)',
    'Ich liebe dich.. bis zum Mond und zurück! <3',
    'Tom, you’re AMAZIIIIING just the way you are! ',
    'The greatest thing you’ll ever learn is just to love and be loved in return.',
    'Du bist der wundervollste und allerliebste Schatz auf der ganzen weiten Welt! <3',
    'Schatz, du machst mein Leben gerade lebenswert.',
    'Du bist so wunderschön und wertvoll... <br/>und mit keinem Geld der Welt zu bezahlen!',
    'If you decided to spend the rest of your life together <br/>you want the rest of your life to start as soon as possible.',
    'Wer den anderen liebt, lässt ihn gelten, <br/>so wie er ist, wie er gewesen ist und wie er sein wird.',
    'In der Liebe versinken und verlieren sich alle WidersprÜche des Lebens.<br/> Nur in der Liebe sind Einheit und Zweiheit nicht in Widerstreit.',
    'Das große GlÜck in der Liebe besteht darin, Ruhe in einem anderen Herzen zu finden.',
    'Sich zu lieben heißt, dich so zu sehen, wie das Schicksal dich schuf: <br/>Für mich perfekt.',
    'Come, let us be a comfortable couple and take care of each other!<br/> How glad weshall be, that we have somebody we are fond of always, to talk to and sit with.',
    'Du bist mein Paradies. <3',
    'Wenn du einen Menschen glücklich machen willst,<br/> dann füge nichts seinem Reichtum hinzu, sondern nimm ihm einige von seinen Wünschen.',
    'Seit du da bist, seitdem wir zusammen sind,... <br/>..seit diesem Zeitpunkt bin ich wunschlos glücklich an deiner Seite.',
    'Two hearts that beat as one.',
    'Truly, madly, deeply.',
    'Ever thine, ever mine, ever our.',
    'You are with me in my dreams.',
    'Jemanden lieben heißt als einziger ein für die anderen unsichtbares Wunder sehen.',
    'And when I am kissing you it all starts making sense.',
    'Die wahre Liebe begegnet uns nur einmal im Leben.<br/> Aber wenn es sie ist, dann kann keine irdische, keine göttliche Macht sie mehr trennen.',
    'You are all there is to me.',
    'Denk daran, die beste Beziehung ist die, <br/>in der die Liebe für den anderen grösser ist, als das Verlangen nach dem anderen.',
];

window.onload = function()
{
    var day     = new Date(),
        rng     = new RNG(day.getDOY()),
        message = messages[rng.nextRange(0, messages.length)];

    document.getElementById('test')
            .appendChild(document.createTextNode(message));
};
</script>
 
Da fehlen ein paar Kommas zwischen den einzelnen Elementen. Und wenn du HTML in der Nachricht haben willst, klappt es besser mit innerHTML.

HTML:
<!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>New</title>

<script type="text/javascript">
/**
 * @see http://stackoverflow.com/questions/424292/how-to-create-my-own-javascript-random-number-generator-that-i-can-also-set-the-s/424445#424445
 */
function RNG(seed) {
  // LCG using GCC's constants
  this.m = 0x100000000; // 2**32;
  this.a = 1103515245;
  this.c = 12345;

  this.state = seed ? seed : Math.floor(Math.random() * (this.m-1));
}
RNG.prototype.nextInt = function() {
  this.state = (this.a * this.state + this.c) % this.m;
  return this.state;
}
RNG.prototype.nextFloat = function() {
  // returns in range [0,1]
  return this.nextInt() / (this.m - 1);
}
RNG.prototype.nextRange = function(start, end) {
  // returns in range [start, end): including start, excluding end
  // can't modulu nextInt because of weak randomness in lower bits
  var rangeSize = end - start;
  var randomUnder1 = this.nextInt() / this.m;
  return start + Math.floor(randomUnder1 * rangeSize);
}
RNG.prototype.choice = function(array) {
  return array[this.nextRange(0, array.length)];
}

/**
 * @see http://javascript.about.com/library/bldayyear.htm
 */
Date.prototype.getDOY = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
}

var messages = [
    'Liebe ist mein Glück mit dir zu teilen.',
    'Es war, ist und wird perfekt sein, mein Liebling!',
    'Liebe ist wochenlanges Warten, bis wir uns wiedersehen.',
    'Day and night I long for you.',
    'Ich liebe dich so sehr wie Winnie Puh seinen Honig! <3',
    'Liebe ist zu wissen, dass ich nur bei dir geborgen bin.',
    'Du bist meine Welt, ohne dich bin ich nichts! Ich liebe dich, Schatz! <3',
    'Liebe ist das Geschenk der eigenen Person an eine andere <br/>- ein Geschenk, das nicht zum Verlust führt, sondern zur Erfüllung.',
    'Ich wollte dir nur mal eben sagen, dass Du das Größte für mich bist!',
    'Liebe ist plötzlich festzustellen, dass ich ohne dich nicht sein kann.',
    'Omnia vincit amor. – Liebe besiegt alles!<br/> (selbst die Entfernung, die uns so oft trennt.. <3)',
    'Ich liebe dich.. bis zum Mond und zurück! <3',
    'Tom, you’re AMAZIIIIING just the way you are! ',
    'The greatest thing you’ll ever learn is just to love and be loved in return.',
    'Du bist der wundervollste und allerliebste Schatz auf der ganzen weiten Welt! <3',
    'Schatz, du machst mein Leben gerade lebenswert.',
    'Du bist so wunderschön und wertvoll... <br/>und mit keinem Geld der Welt zu bezahlen!',
    'If you decided to spend the rest of your life together <br/>you want the rest of your life to start as soon as possible.',
    'Wer den anderen liebt, lässt ihn gelten, <br/>so wie er ist, wie er gewesen ist und wie er sein wird.',
    'In der Liebe versinken und verlieren sich alle WidersprÜche des Lebens.<br/> Nur in der Liebe sind Einheit und Zweiheit nicht in Widerstreit.',
    'Das große GlÜck in der Liebe besteht darin, Ruhe in einem anderen Herzen zu finden.',
    'Sich zu lieben heißt, dich so zu sehen, wie das Schicksal dich schuf: <br/>Für mich perfekt.',
    'Come, let us be a comfortable couple and take care of each other!<br/> How glad weshall be, that we have somebody we are fond of always, to talk to and sit with.',
    'Du bist mein Paradies. <3',
    'Wenn du einen Menschen glücklich machen willst,<br/> dann füge nichts seinem Reichtum hinzu, sondern nimm ihm einige von seinen Wünschen.',
    'Seit du da bist, seitdem wir zusammen sind,... <br/>..seit diesem Zeitpunkt bin ich wunschlos glücklich an deiner Seite.',
    'Two hearts that beat as one.',
    'Truly, madly, deeply.',
    'Ever thine, ever mine, ever our.',
    'You are with me in my dreams.',
    'Jemanden lieben heißt als einziger ein für die anderen unsichtbares Wunder sehen.',
    'And when I am kissing you it all starts making sense.',
    'Die wahre Liebe begegnet uns nur einmal im Leben.<br/> Aber wenn es sie ist, dann kann keine irdische, keine göttliche Macht sie mehr trennen.',
    'You are all there is to me.',
    'Denk daran, die beste Beziehung ist die, <br/>in der die Liebe für den anderen grösser ist, als das Verlangen nach dem anderen.',
];

window.onload = function()
{
    var day     = new Date(),
        rng     = new RNG(day.getDOY()),
        message = messages[rng.nextRange(0, messages.length)];

    document.getElementById('test').innerHTML = message;
            //.appendChild(document.createTextNode(message));
};
</script>

            </head>

    <body>
        <div id="test"></div>
    </body>

</html>
 
Entschuldige, bei einem anderen hat es auch noch gefehlt. Hier der verbesserte Code, so funktioniert es bei mir:
HTML:
<!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>New</title>


</head>
<body>
<script type="text/javascript">
/**
 * @see How to create my own JavaScript Random Number generator that I can also set the seed - Stack Overflow
 */
function RNG(seed) {
  // LCG using GCC's constants
  this.m = 0x100000000; // 2**32;
  this.a = 1103515245;
  this.c = 12345;

  this.state = seed ? seed : Math.floor(Math.random() * (this.m-1));
}
RNG.prototype.nextInt = function() {
  this.state = (this.a * this.state + this.c) % this.m;
  return this.state;
}
RNG.prototype.nextFloat = function() {
  // returns in range [0,1]
  return this.nextInt() / (this.m - 1);
}
RNG.prototype.nextRange = function(start, end) {
  // returns in range [start, end): including start, excluding end
  // can't modulu nextInt because of weak randomness in lower bits
  var rangeSize = end - start;
  var randomUnder1 = this.nextInt() / this.m;
  return start + Math.floor(randomUnder1 * rangeSize);
}
RNG.prototype.choice = function(array) {
  return array[this.nextRange(0, array.length)];
}

/**
 * @see Day of Year Date Method
 */
Date.prototype.getDOY = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
} 

var messages = [
    'Liebe ist mein Glück mit dir zu teilen.',
    'Es war, ist und wird perfekt sein, mein Liebling!',
    'Liebe ist wochenlanges Warten, bis wir uns wiedersehen.',
    'Day and night I long for you.',
    'Ich liebe dich so sehr wie Winnie Puh seinen Honig! <3',
    'Liebe ist zu wissen, dass ich nur bei dir geborgen bin.',
    'Du bist meine Welt, ohne dich bin ich nichts! Ich liebe dich, Schatz! <3',
    'Liebe ist das Geschenk der eigenen Person an eine andere <br/>- ein Geschenk, das nicht zum Verlust führt, sondern zur Erfüllung.',
    'Ich wollte dir nur mal eben sagen, dass Du das Größte für mich bist!',
    'Liebe ist plötzlich festzustellen, dass ich ohne dich nicht sein kann.',
    'Omnia vincit amor. – Liebe besiegt alles!<br/> (selbst die Entfernung, die uns so oft trennt.. <3)',
    'Ich liebe dich.. bis zum Mond und zurück! <3',
    'Tom, you’re AMAZIIIIING just the way you are! ',
    'The greatest thing you’ll ever learn is just to love and be loved in return.',
    'Du bist der wundervollste und allerliebste Schatz auf der ganzen weiten Welt! <3',
    'Schatz, du machst mein Leben gerade lebenswert.',
    'Du bist so wunderschön und wertvoll... <br/>und mit keinem Geld der Welt zu bezahlen!',
    'If you decided to spend the rest of your life together <br/>you want the rest of your life to start as soon as possible.',
    'Wer den anderen liebt, lässt ihn gelten, <br/>so wie er ist, wie er gewesen ist und wie er sein wird.',
    'In der Liebe versinken und verlieren sich alle WidersprÜche des Lebens.<br/> Nur in der Liebe sind Einheit und Zweiheit nicht in Widerstreit.',
    'Das große GlÜck in der Liebe besteht darin, Ruhe in einem anderen Herzen zu finden.',
    'Sich zu lieben heißt, dich so zu sehen, wie das Schicksal dich schuf: <br/>Für mich perfekt.',
    'Come, let us be a comfortable couple and take care of each other!<br/> How glad weshall be, that we have somebody we are fond of always, to talk to and sit with.',
    'Du bist mein Paradies. <3',
    'Wenn du einen Menschen glücklich machen willst,<br/> dann füge nichts seinem Reichtum hinzu, sondern nimm ihm einige von seinen Wünschen.',
    'Seit du da bist, seitdem wir zusammen sind,... <br/>..seit diesem Zeitpunkt bin ich wunschlos glücklich an deiner Seite.',
    'Two hearts that beat as one.',
    'Truly, madly, deeply.',
    'Ever thine, ever mine, ever our.',
    'You are with me in my dreams.',
    'Jemanden lieben heißt als einziger ein für die anderen unsichtbares Wunder sehen.',
    'And when I am kissing you it all starts making sense.',
    'Die wahre Liebe begegnet uns nur einmal im Leben.<br/> Aber wenn es sie ist, dann kann keine irdische, keine göttliche Macht sie mehr trennen.',
    'You are all there is to me.',
    'Denk daran, die beste Beziehung ist die, <br/>in der die Liebe für den anderen grösser ist, als das Verlangen nach dem anderen.',
];

window.onload = function()
{
    var day     = new Date(),
        rng     = new RNG(day.getDOY()),
        message = messages[rng.nextRange(0, messages.length)];

    document.getElementById('test')
            .appendChild(document.createTextNode(message));
};
</script>
<div id="test">
</div>
</body>
</html>
 
Zurück
Oben