Newsgroup: it.comp.programmare
Titolo: nibbles.bas

Sono morbosamente affezionato a nibbles.bas, giochino dimostrativo per
QBasic 1.0 inserito in Ms-Dos 5.0. Sui pc più recenti tuttavia e'
impossibile farlo funzionare, perche' il sistema di compensazione
della velocita' non funziona con cpu di clock inimmaginabili per il
1990. Voi come sistemereste le righe per la regolazione della
velocita' per adeguarlo a frequenze di cpu elevate? Allego le righe in
questione. (io c'ero riuscito, a braccio, un po' di tempo fa, ma non
ricordo come ed ho perso il file).
    LOCATE 8, 21: PRINT "Skill level (1 to 100)"
    LOCATE 9, 22: PRINT "1   = Novice"
    LOCATE 10, 22: PRINT "90  = Expert"
    LOCATE 11, 22: PRINT "100 = Twiddle Fingers"
    LOCATE 12, 15: PRINT "(Computer speed may affect your skill
level)"
    DO
        LOCATE 8, 44: PRINT SPACE$(35);
        LOCATE 8, 43
        INPUT gamespeed$
    LOOP UNTIL VAL(gamespeed$) >= 1 AND VAL(gamespeed$) <= 100
    speed = VAL(gamespeed$)
    speed = (100 - speed) * 2 + 1
    startTime# = TIMER                  ' Calculate speed of system
    FOR i# = 1 TO 1000: NEXT i#          ' and do some compensation
    stopTime# = TIMER
    speed = speed * .5 / (stopTime# - startTime#)
Saluti
---
Josef 
Prima di rispondere in privato, guardate nel field Organization
(cosa non si fa per evitare sto c***o di spam!!!!)

     speed = (100 - speed) * 2 + 1
Prova con
     speed = (1000 - speed * 100) * 2 + 1
-- 
Internet Explorer -  Errore 337 : Errore non definito...!
News2000 1.5ß Version 
http://socket2000.8m.com

     speed = (1000 - speed * 100) * 2 + 1
provato:
sul mio AMD K6-III 450 si riesce a emulare abbastanza bene la
velocita' che avrebbe su un vecchio pc con 
speed = (350 - speed) * 2 + 1
ma ( e questo anche mantenendo il listato originale) una volta su tre
da un errore di divisione per 0 su 
    speed = speed * .5 / (stopTime# - startTime#)
sapreste dirmi come evitarlo?
Inoltre, mi piacerebbe elaborare un nibbles -magari tradotto in
italiano- utilizzabile su tutti i pc... come riuscire amodulare il
valore dal quale si sottrae speed a seconda del clock della  cpu?
(naturalmente inserirei all'inizio la richiesta di inserire la potenza
del processore)
Grazie ancora.


sapreste dirmi come evitarlo?
Evidentemente, stopTime = startTime. Questo fa pensare che, quelle
due volte su tre che non ti si pianta, stopTime = startTime + 1, e
di conseguenza potresti provare sostituendo quella riga con
	speed = speed / 2
Leonardo
-- 
".signature": bad command or file name

 speed = speed / 2
e invece aumentando il tempo de ciclo for?
l'originale e':
    startTime# = TIMER                  ' Calculate speed of system
    FOR i# = 1 TO 1000: NEXT i#          ' and do some compensation
    stopTime# = TIMER
al posto dell'originale 1000 provare con un valore più alto in modo da
compensare "linearmente" il livello di difficoltà?
--
Ciao by Beppe

compensare "linearmente" il livello di difficoltà?
Ti servirebbe una compensazione quadratica. Boh, forse si potrebbe fare
con qualcosa del tipo
	startTime# = TIMER + 1
	while ( startTime# <> TIMER )
		continue;
	// Siamo sincronizzati.
	i# = 0
	while ( startTime# == TIMER )
		i# = i# + 1
	// Adesso i# contiene esattamente il numero di chiamate	
	// a TIMER che stanno in un ciclo di TIMER.
	// In altre parole, il ciclo:
		for ( j# = 0; j# < i#; j#++)
			fregatene# = TIMER
	// impieghera' esattamente 1 colpo di TIMER.
Leonardo 30% C, 30% Basic, 40% vodka
