JavaScript一个猜数字游戏

效果图:

代码:

<body>
<script type="text/javascript">
window.onload = newgame;		//页面载入的时候就开始一个新的游戏
window.onpopstate = popState;	//处理历史记录相关事件
var state,ui;			//全局变量,在newgame()方法中会对其初始化

function newgame( playagin ){	//开始一个新的猜数字游戏
	//初始化一个包含需要的文档元素的对象
	ui ={
		heading: null,	//文档最上面的<h1>元素
		prompt : null,	//要求用户输入一个猜测数字
		input : null,	//用户输入猜测数字的地方
		low : null,	//可视化的三个表单单元格
		mid : null,	//猜测的数字范围
		high : null
	};

	//查询这些元素中每个元素的id
	for(var id in ui)
		ui[id] = document.getElementById(id);

	//给input字段定义一个事件处理程序函数
	ui.input.onchange = handleGuess;

	//生成一个随机的数字并初始化游戏状态
	state ={
		n : Math.floor(99*Math.random())+1,	//整数: 0<n<100
		low : 0,		//可猜测数字范围的下限
		high : 100,		//可猜测数字范围的上限
		guessnum : 0 ,	//猜测次数
		guess : undefined //最后一次猜测
	};

	//修改文档内容来显示该初始状态
	display(state);

	/**
	 * 此函数会作为onload事件处理程序调用,
	 * 同时当单机显示在游戏最后的“再玩一次”按钮时候,也会调用它
	 * 在第二种调用情况下,playagain参数值为true
	 * 如果playagain为true,则保存新的游戏状态
	 * 但是如果是作为onload事件处理程序调用的情况下,则不保存状态
	 * 这是因为,当通过浏览器历史记录从其他文档状态回退到当前的游戏状态时,
	 * 也会出发load事件,如果这种情况下,也保存状态的话
	 * 会将真正的游戏历史状态记录覆盖掉
	 * 在支持pushState()方法的浏览器中,load事件之后总是有一个popstate事件
	 * 因此,这里的处理方式是,等待popstate事件而不是之间进行状态保存
	 * 如果该事件提供一个状态对象,则直接使用该对象即可
	 * 如果该事件没有状态对象,就表示这实际上是一个新的游戏
	 * 则使用replaceState来保存最新的游戏状态
	 */
	if(playagin ==true)
		save(state);
}

//如果支持的话,就使用pushState()方法将游戏状态保存到浏览器历史记录中
function save(state){
	if(!history.pushState)
		return;		//如果pushState()方法没有定义的话,则什么也不做

	//这里会将一个保存的状态和URL关联起来
	//该URL显示猜测的数字,但是不对游戏状态进行编码
	//因此,这对于书签是没有用的
	//不能简单地游戏状态写到URL中,因为这会将游戏一些机密数字暴露在地址栏中
	var url = "#guess"+state.guessnum;
	//保存状态对象和URL
	history.pushState(state,	//要保存的状态对象
			"",					//状态标题,当前浏览器会忽略它
			url 				//状态URL:对书签是没有用的
		);
}

//这是onpopstate的事件处理程序,用于恢复历史状态
function popState(event){
	if(event.state){	//如果事件有一个状态对象,则恢复该状态
		//要注意的是,event.state是对已保存状态对象的一个深拷贝
		//因此无须改变保存的值就可以修改该对象
		state = event.state;		//恢复历史状态
		display(state);				//显示恢复的状态
	}else{
		//当第一次载入页面时,会触发一个没有状态的popstate事件
		//用真实的状态将null状态替换掉: 参见newgame()方法中的注释
		//这里不需要调用display()方法
		history.replaceState(state,"","#guess"+state.guessnum);
	}
};

//每次用户猜测一个数字的时候,都会调用此事件处理程序
//此处处理程序用于更新游戏的状态、保存游戏状态并显示游戏游戏状态
function handleGuess(){
	//从input字段中获取用户猜测的数字
	var g = parseInt(this.value);
	//如果该值是限定范围中的一个数字
	if((g > state.low)&&(g<state.high)){
		//对应的更新状态对象
		if(g < state.n)
			state.low = g;
		else
			if(g > state.n)
				state.high = g;
	state.guess = g;
	state.guessnum++;
	//在浏览器历史记录中保存新的状态
	save(state);
	//根据用户猜测情况来修改文档
	display(state);
	}
	else{		//无效的猜测
		alert("请输入一个比"+state.low+",并且比"+state.high+"大的数。");
	}
}

//修改文档显示游戏当前状态
function display(state){
	//显示文档的导航和标题
	ui.heading.innerHTML =document.title="我认为这个数字是"+state.low+"~"+state.high+"之间。";

	//使用一个表格来显示数字的取值范围
	ui.low.style.width = state.low+"%";
	ui.mid.style.width = (state.high-state.low)+"%";
	ui.high.style.width = (100-state.high)+"%";

	//根据用户最近的猜测,设置提示
	if(state.guess===undefined)
		ui.prompt.innerHTML = "你的输入有误!";
	else if(state.guess < state.n)
		ui.prompt.innerHTML = state.guess + "太小了,请重新输入:";
	else if(state.guess > state.n)
		ui.prompt.innerHTML = state.guess + "太大了,请重新输入:";
	else{
		//当才对了的时候,就隐藏input字段并显示“再玩一次”按钮
		ui.input.style.visibility = "hidden"; 	//不需要再猜了
		ui.heading.innerHTML = document.title = state.guess+"命中答案。"
		ui.prompt.innerHTML = "你赢了,<button onclick=‘newgame(true)‘>再玩一次</button>";
	}
}
</script>
<style type="text/css">
#prompt {font-size: 16pt;}
table{width: 90%; margin: 10px; margin-left: 5%;}
#low,#high{ background: lightgray; height: 1em; }
#mid{background-color: green;}
</style>
	<h1 id="heading">我在等一个数:</h1>
	<table>
		<tr>
			<td id="low"></td>
			<td id="mid"></td>
			<td id="high"></td>
		</tr>
	</table>
	<label id="prompt"></label><input type="text" id="input">
</body>

  

时间: 2024-10-13 12:48:04

JavaScript一个猜数字游戏的相关文章

编写一个猜数字游戏

编写一个程序,实现猜数字游戏,计算机随机产生一个数,输入猜的数,与计算机随机产生的数进行比较,当猜的数大于随机产生的数,给出提示猜的数过大,反之,给出提示猜的数太小.下面是具体的程序: #include <stdio.h> #include <stdlib.h> #include <time.h> void fun()        //定义fun函数,说明游戏的具体操作 {     int a=0;     int ret=rand()%100;           

用Python写一个猜数字游戏

2015.5.25第一天下载Python IDLE,写个猜数字的小游戏来熟悉这门语言: 1 times=6 2 letters=[100] 3 for i in range(1,times): 4 a = input("input the number you guess:") 5 try: 6 b = int(a) 7 if isinstance(b,int): 8 if i <5: 9 if int(a) in letters: 10 print("%s is th

运用python写一个猜数字游戏,学自小甲鱼老师

代码 """用python设计第一个游戏""" temp = input("猜猜小甲鱼心里想的是那个数字:")guess = int(temp) if guess == 8: print("你是小甲鱼心里的蛔虫吗?!") print("哼,猜中了也没奖励!")else: print("猜错了,小甲鱼心里想的是8!") print("游戏结束,不玩啦"

Java完成简单猜数字游戏

猜数字游戏v1.0 实现了自定义区间的游戏玩法,并能在游戏结束后继续下一轮,这是其他程序没有兼顾的,希望有帮助,最后也希望有人愿意帮我解决代码优化的问题,谢谢. /*需求: *1. 完成一个猜数字游戏,数据区间由玩家自定义,游戏开始后针对玩家输入的值,给出一个缩小版的指导区间: *2. 结束一轮游戏后,玩家可以选择是否继续玩耍: *思路: *1. 创建一个指定区间int类型的随机数,区间由玩家指定: *2. 针对玩家猜的数据,比较后给出判断,大了.小了可以给出一个指导区间,直到猜对为止,记录猜的

猜数字游戏(笔试题目)

在CSDN上看到一个笔试题目..收藏一下 机试就一个题目:写一个猜数字游戏,电脑随机生成一个数字(比如 1-100 之间)让玩家猜,如果没猜中,就告诉玩家猜的数字是大了还是小了,直到猜中为止,最后告诉玩家猜了多少次.整个游戏用最简单的控制台输入输出就行 package com.sun.demo; import java.util.Random; import java.util.Scanner; public class Test01 { public static void main(Stri

python GUI 猜数字游戏

# -*- coding:utf-8 -*- import easygui,random status = easygui.buttonbox("这是一个猜数字游戏,点击开始进行游戏,点击退出关闭游戏.", choices = ["开始","退出"]) if status == "开始":     s_number = random.randint(1,100)     count = 0     u_number = 0  

python写简单的猜数字游戏

最近在学python,学到控制流程要写一个猜数字游戏.不经想起小时候三色台的一个综艺节目,里面也有个猜数字游戏,于是就想写个简单的自己玩玩也好. 规则:[0-100]随机生成一个数字,然后在猜数字,每叫一次数字都是出现一个区间,不断的缩小区间直到猜对正确数字. 刚开始写就想着用赋值的方法解决吧,可变量越来越多,头晕啊!冷静下,仔细想来,其实我要的结果就是区间的不断减小,这就没必要拘束在变量里面了,于是就用了list.list的排序,可变都有助于功能的实现,果然功能就简单的实现了. import 

需求:有一个猜数字小游戏,请写一个程序实现在测试类中只能使用5次,超过5次提示:游戏试玩结束,请付费。

package cn.idcast4; import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.Reader;import java.io.Writer;import java.util.Properties; /* * 需求:有一个猜数字小游戏,请写一个程序实现在测试类中只能使用5次, *

python------用python写一个猜数字的游戏

这样一个小游戏,我们用shell也是可以完成的,但是这里我们主要是练习python!具体的要求及shell的写法http://zidingyi.blog.51cto.com/10735263/1767566! #!/usr/bin/env python # coding=utf8                 /定义字符集,主要是为了打印出汉字 print ("-------------猜数字游戏----------------") import random tmp = rando