2013-12-24 01:18:43 +01:00
|
|
|
/*************************************************************************
|
2013-12-28 23:49:13 +01:00
|
|
|
## NumberGuess mini-game:
|
2013-12-24 01:18:43 +01:00
|
|
|
|
2013-12-28 23:49:13 +01:00
|
|
|
### Description
|
2013-12-26 16:38:24 +01:00
|
|
|
This is a very simple number guessing game. Minecraft will ask you to
|
|
|
|
guess a number between 1 and 10 and you will tell you if you're too
|
|
|
|
hight or too low when you guess wrong. The purpose of this mini-game
|
|
|
|
code is to demonstrate use of Bukkit's Conversation API.
|
|
|
|
|
2013-12-28 23:49:13 +01:00
|
|
|
### Example
|
2013-10-13 22:08:04 +02:00
|
|
|
|
2013-12-30 22:33:12 +01:00
|
|
|
/js Game_NumberGuess.start(self)
|
2013-10-13 22:08:04 +02:00
|
|
|
|
2013-12-26 16:38:24 +01:00
|
|
|
Once the game begins, guess a number by typing the `/` character
|
|
|
|
followed by a number between 1 and 10.
|
|
|
|
|
2013-12-24 01:18:43 +01:00
|
|
|
***/
|
2014-02-19 23:17:19 +01:00
|
|
|
var bkPrompt = org.bukkit.conversations.Prompt,
|
|
|
|
bkConversationFactory = org.bukkit.conversations.ConversationFactory,
|
|
|
|
bkConversationPrefix = org.bukkit.conversations.ConversationPrefix,
|
|
|
|
bkBukkit = org.bukkit.Bukkit;
|
2014-01-12 12:26:26 +01:00
|
|
|
|
2014-01-29 20:49:15 +01:00
|
|
|
var sb = function( cmd ) {
|
2014-02-19 23:17:19 +01:00
|
|
|
bkBukkit.dispatchCommand( server.consoleSender, 'scoreboard ' + cmd ) ;
|
2014-01-12 12:26:26 +01:00
|
|
|
};
|
|
|
|
|
2013-12-24 01:18:43 +01:00
|
|
|
exports.Game_NumberGuess = {
|
2014-01-29 20:49:15 +01:00
|
|
|
start: function( sender ) {
|
2014-01-12 12:26:26 +01:00
|
|
|
|
2014-01-29 20:49:15 +01:00
|
|
|
var guesses = 0;
|
2014-01-12 12:26:26 +01:00
|
|
|
|
2014-01-29 20:49:15 +01:00
|
|
|
sb( 'objectives add NumberGuess dummy Guesses' );
|
|
|
|
sb( 'players set ' + sender.name + ' NumberGuess ' + guesses );
|
|
|
|
sb( 'objectives setdisplay sidebar NumberGuess' );
|
2014-01-14 00:01:17 +01:00
|
|
|
|
2014-01-29 20:49:15 +01:00
|
|
|
var number = Math.ceil( Math.random() * 10 );
|
|
|
|
|
2014-02-19 23:17:19 +01:00
|
|
|
var prompt = new bkPrompt( ) {
|
2014-01-29 20:49:15 +01:00
|
|
|
|
|
|
|
getPromptText: function( ctx ) {
|
|
|
|
var hint = '';
|
|
|
|
var h = ctx.getSessionData( 'hint' );
|
|
|
|
if ( h ) {
|
|
|
|
hint = h;
|
|
|
|
}
|
|
|
|
return hint + 'Think of a number between 1 and 10';
|
|
|
|
},
|
|
|
|
|
|
|
|
acceptInput: function( ctx, s ) {
|
|
|
|
s = s.replace( /^[^0-9]+/, '' ); // strip leading non-numeric characters (e.g. '/' )
|
|
|
|
s = parseInt( s );
|
|
|
|
if ( s == number ) {
|
|
|
|
setTimeout(function( ) {
|
|
|
|
ctx.forWhom.sendRawMessage( 'You guessed Correct!' );
|
|
|
|
sb( 'objectives remove NumberGuess' );
|
|
|
|
}, 100 );
|
|
|
|
return null;
|
|
|
|
} else {
|
|
|
|
if ( s < number ) {
|
|
|
|
ctx.setSessionData( 'hint', 'too low\n' );
|
|
|
|
}
|
|
|
|
if ( s > number ) {
|
|
|
|
ctx.setSessionData( 'hint', 'too high\n' );
|
|
|
|
}
|
|
|
|
guesses++;
|
|
|
|
sb( 'players set ' + sender.name + ' NumberGuess ' + guesses );
|
|
|
|
|
|
|
|
return prompt;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
blocksForInput: function( ctx ) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
2014-02-19 23:17:19 +01:00
|
|
|
var convPrefix = new bkConversationPrefix( ) {
|
2014-01-29 20:49:15 +01:00
|
|
|
getPrefix: function( ctx ) {
|
|
|
|
return '[1-10] ';
|
|
|
|
}
|
|
|
|
};
|
2014-02-19 23:17:19 +01:00
|
|
|
new bkConversationFactory( __plugin )
|
2014-01-29 20:49:15 +01:00
|
|
|
.withModality( true )
|
|
|
|
.withFirstPrompt( prompt )
|
|
|
|
.withPrefix( convPrefix )
|
|
|
|
.buildConversation( sender )
|
|
|
|
.begin( );
|
|
|
|
}
|
2013-12-24 01:18:43 +01:00
|
|
|
};
|