⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game.js

📁 flash platform game with code
💻 JS
📖 第 1 页 / 共 2 页
字号:
		
	/*** transform the game_area ***/ /** ZOOM MODE **/
	var sx, sy, tx, ty;	
	
	/*** Add your code here ***/
	
	// calculate scaling factors	

	
	// calculate translating factors
	tx = SCREEN_WIDTH/zoom - player.x * zoom;
	if(tx > 0) tx = 0;
	else if (tx < SCREEN_WIDTH - SCREEN_WIDTH * zoom)
	    tx = SCREEN_WIDTH - SCREEN_WIDTH * zoom;
	ty = SCREEN_HEIGHT/zoom - player.y * zoom;
	if (ty > 0) ty = 0;
	else if (ty < SCREEN_HEIGHT - SCREEN_HEIGHT * zoom)
        ty = SCREEN_HEIGHT - SCREEN_HEIGHT * zoom;	
	
		
	// transform the game_area
	game_area.setAttribute("transform", "translate(" + tx + "," + ty + ") scale(" + zoom + "," + zoom + ")");
		

}

function set_zoom_level() {
	zoom = 2.0;
	set_level();
}

//creat monster
function create_monster(x, y, minx, maxx, step) {
	var new_monster;
	new_monster = SVGDoc.createElement("use");
	new_monster.setAttribute("x", x);
    new_monster.setAttribute("y", y);
	new_monster.setAttribute("minx", minx);
	new_monster.setAttribute("maxx", maxx);
	new_monster.setAttribute("step", step);
    new_monster.setAttributeNS(namespace, "xlink:href", "#monster");
    monsters_group.appendChild(new_monster);
}

//to reduce the time
function time_remaining() {
	time_text = SVGDoc.getElementById("timer").childNodes.item(0);
	total_time--;

	time_text.setData(total_time + " sec.");
	if (total_time <= 0) {
		clearInterval(interval);
		clearInterval(timer);
		play_sound("die_sound");
		over_timer = setInterval("game_over_move()", 50);
	}
}

function next_level() {
	var cx, cy, x1, x2, y1, y2;
    cx = player.x;
    cy = player.y;
		x1 = exit_x - 15;
	    y1 = exit_y - 15;
	    x2 = exit_x + 15;
	    y2 = exit_y + 15;
	if (x1 <= cx && x2 >= cx && y1 <= cy && y2 >= cy) {
		clearInterval(interval);
		clearInterval(timer);		
		play_sound("end_sound");

		if (!zoom_mode)
			score += s_score*total_time;
		else score += s_score*total_time*2;
		score_text.setData(score);
		
		level++;
		set_level();
	}
}

function set_level() {
	start_up = SVGDoc.getElementById("start_up_page");
	start_up.setAttribute("visibility","hidden");
	
	
	// set all variables
	player.SetPosition(PLAYER_INIT_X, PLAYER_INIT_Y);

	total_time = 45;
	total_time = total_time - (level-1)*10;
	if (total_time <= 0)
		total_time = 0;
	
	laser_left = 20;
	
	// show the status
	time_text = SVGDoc.getElementById("timer").childNodes.item(0);
	time_text.setData(total_time + " sec.");	
		
	level_text = SVGDoc.getElementById("level").childNodes.item(0);
	level_text.setData("Level " + level);

	leaer_left_text = SVGDoc.getElementById("laser_left").childNodes.item(0);
	leaer_left_text.setData(laser_left);
	
	score_text = SVGDoc.getElementById("score").childNodes.item(0);
	score_text.setData(score);
	
	cheat_text = SVGDoc.getElementById("cheat").childNodes.item(0);
	cheat_text.setData("~NO~");
	switch (cheat) {
		case true:
			cheat_text.setData("~YES~");
			break;
		case false:
			cheat_text.setData("~NO~");
			break;
	}	
	
	//clear all monster
	while (monsters_group.childNodes.length != 0) {
		//alert("kill monster");
		var monster = monsters_group.childNodes.item(0);
		monsters_group.removeChild(monster);
	}
	
	while (lasers_group.childNodes.length != 0) {
		//alert("kill monster");
		var laser = lasers_group.childNodes.item(0);
		lasers_group.removeChild(laser);
	}
	
	// create monster create_monster(x, y, minx, maxx, step)
	create_monster(90, 7, 100, 90, 0);	//at start point
	create_monster(410, 65, 400, 520, 2);	//near end point
	create_monster(200, 147, 200, 200, 0);	//under disappear 1
	create_monster(380, 217,380, 380, 0);	//near disappear 2
	create_monster(30, 217, 30, 120, 2);	//under monster 3
	create_monster(300, 342, 300, 570, 10);	//monster 6
	
	var platforms = SVGDoc.getElementById("platforms_group");
	for (var i = 0; i < platforms.childNodes.length; i++) {
		floor = platforms.childNodes.item(i);
		if (floor.getAttribute("type") == "disappearing") {
			floor.setAttribute("visibility","visible");
			floor.setAttribute("opacity",1);
		}
		else continue;
	}
			
		
	// Start up the game
	game_start();
}

// move the monster
function move_monster() {
	var x, x1, x2, minx, maxx, step, monster;
	for (i=0; i<monsters_group.childNodes.length; i++) {
		monster = monsters_group.childNodes.item(i);
		step= parseFloat(monster.getAttribute("step"));
		if (step==0) continue; //not a number
		
		//get position of monster
		x1 = parseFloat(monster.getAttribute("x"));
		x2 = x1 + MONSTER_WIDTH;
		
		minx = parseFloat(monster.getAttribute("minx"));
		maxx = parseFloat(monster.getAttribute("maxx"));
				
		x1 += step;
		x2 += step;
		
		// moving range of monster
		if (x1 < minx) {
			x1 = minx;
			x2 = minx + MONSTER_WIDTH;
			step *= -1;
		}
		
		if (x2 > maxx) {
			x1 = maxx - MONSTER_WIDTH;
			x2 = maxx;
			step *= -1;
		}
		
		
/* 		if (step<0)
			monster.setAttribute("transform", "translate("+MONSTER_WIDTH+", 0) scale(1, 1)");
		else 
		monster.setAttribute("transform", "translate("+MONSTER_WIDTH+", 0) scale(-1, 1)"); */
		
		monster.setAttribute("x",x1);
		monster.setAttribute("step",step);
	}
}

// move the platform
function move_platform() {
	var y1, y2, miny, maxy, step, floor;
	var platforms = SVGDoc.getElementById("platforms_group");
	
	for (var i = 0; i < platforms.childNodes.length; i++) {
		floor = platforms.childNodes.item(i);
		
		if (floor.nodeName == "line") {
		    step = parseFloat(floor.getAttribute("step"));
		    if (isNaN(step)) continue; //not a number
		    
			y2 = y1 = parseFloat(floor.getAttribute("y1"));
		    miny = parseFloat(floor.getAttribute("miny"));
		    maxy = parseFloat(floor.getAttribute("maxy"));
			
		    y2 = y1 += step;
		    
		    if (y1 < miny) {
		        y2 = y1 = miny;
		        step *= -1;
		    }
		    
		    if (y1 > maxy) {
		        y2 = y1 = maxy;
		        step *= -1;
		    }
		    			
		    floor.setAttribute("y1",y1);
		    floor.setAttribute("y2",y2);
		    floor.setAttribute("step",step);
		    
		    var floor_width = parseFloat(floor.getStyle().getPropertyValue("stroke-width"))/2.0;
					
		    var distance = y1 - floor_width - player.bottom;
		    
		    if (step < 0 && distance >= step
		        && distance <=0
		        && floor.getAttribute("x1") <= player.right
		        && floor.getAttribute("x2") >= player.left) {
		        player.SetPosition(player.x, y1 - floor_width - player.height/2.0);
				platform_found = true;

		    }		
		}
	}

//for disappearing platform	
	for (i=0; i<platforms.childNodes.length; i++) {
		var disappearing_platform = platforms.childNodes.item(i);
		if (disappearing_platform.getAttribute("type") != "disappearing") {
			continue;
		}
		else {
			var opacity_value = parseFloat(disappearing_platform.getAttribute("opacity"));
			var top = parseInt(disappearing_platform.getAttribute("y1")) - parseFloat(floor.getStyle().getPropertyValue("stroke-width")) / 2.0 ;
			var left = parseInt(disappearing_platform.getAttribute("x1"));
			var right = parseInt(disappearing_platform.getAttribute("x2"));
			if ((top-player.bottom == 0) && (player.right > left) && (player.left < right)) {
				opacity_value -= 0.1;
				disappearing_platform.setAttribute("opacity",opacity_value);
				if (opacity_value <= 0)
				{
					disappearing_platform.setAttribute("visibility", "hidden");
					break;
				}
			}
		}
	}
	
//for sliding platform
	for (i=0; i<platforms.childNodes.length; i++) {
	    var sliding_platform = platforms.childNodes.item(i);
	    var step_value = parseInt(sliding_platform.getAttribute("step_p")); 

	    if (isNaN(step_value) 
		&& sliding_platform.getAttribute("type") != "sliding") {
	        continue;   
	    } 
		else {
			var top = parseInt(sliding_platform.getAttribute("y1")) - parseFloat(floor.getStyle().getPropertyValue("stroke-width")) / 2.0 ;
			var left = parseInt(sliding_platform.getAttribute("x1"));
			var right = parseInt(sliding_platform.getAttribute("x2"));
			if ((top-player.bottom == 0) && (player.right > left) && (player.left < right)) {
				player.SetPosition(player.x - step_value, player.y);
			}
		}
	}

	
	
}

function play_sound(id){
	//alert("here!!!");
	SVGDoc.getElementById(id).endElement(); 
	SVGDoc.getElementById(id).beginElement();
}







//--------------------------------Game over and Cookie part!!!!!

// SVG score board and cookies
var max_player = 10;
var separator = "|";
	
// ----- Class player_record -----

// a player record object and properties in a Javascript object
function player_record(name, score) {
	this.name = name;	// player's name
	this.score = score;	// player's score
}

// --------- functions -----------

// write a line of text in a 'text' element
// by adding 'tspan' element under the 'text' element
function svg_writeln(object_name, str1, str2) {
	
	var x = parseFloat(object_name.getAttribute("x"));
	var y = parseFloat(object_name.getAttribute("y"));
	//alert(x + "     " + y);
	
	// create a text node, for holding the text "str"
	var myData1 = SVGDoc.createTextNode(str1);
	var myData2 = SVGDoc.createTextNode(str2);
	
	// create a 'tspan' element
	var mySpan1 = SVGDoc.createElement("tspan");
	var mySpan2 = SVGDoc.createElement("tspan");
	
	// set the properties of the 'tspan' element
	mySpan1.setAttribute("x", x);
	mySpan1.setAttribute("dx", "3em");
	mySpan1.setAttribute("dy", "1em");
	
	// set the properties of the 'tspan' element
	mySpan2.setAttribute("x", x);
	mySpan2.setAttribute("dx", "13em");
	
	// add the text node to the 'tspan' element
	mySpan1.appendChild(myData1);
	mySpan2.appendChild(myData2);
	
	// add the 'tspan' element to the text element
	object_name.appendChild(mySpan1);
	object_name.appendChild(mySpan2);
}

// show the players' score on the score board
function show_score_board(player_list) {
	
	// get the SVG 'text' element inside the score board group
	var score_board_text = SVGDoc.getElementById("score_board_text");
	
	// print all the records to the score board
	for (i=0; i< player_list.length ; i++) {
		
		var str1 = player_list[i].name;
		var str2 = player_list[i].score;
		svg_writeln (score_board_text, str1, str2);
	}
	
	// set the score board to be visible
	var score_board = SVGDoc.getElementById("score_board");
	score_board.setAttribute("visibility", "visible");
}

// add a player record to the cookie file
function add_player_cookies(player_record, total) {
	
	// expiration date, cookie expires in one year (actually, 365 days)
	var now = new Date();											//now = expiry date
    now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000);			//now = 1 year later
        		
    // ******* write your code here *******
 	// set the cookies 
	index = total - 1;
	set_cookie("total", total, now);
	set_cookie("player" + index, player_record.name + separator + player_record.score, now);
	// for (i=0; i<total; i++)
	// {
		// set_cookie("player" + i, player_record[i].name + separator + player_record[i].score, now);
	// }
}

// get all the players' record from cookie file
function get_players_cookies(player_list) {
	
	// get the total number of player
 	var count = get_cookie("total");
 	if (count==null)			// check if any cookies stored
 		count = 0;
 	else
 		count = parseInt(count);
 	
 	// ******* write your code here *******
 	// get all the players' record from the cookies
 	 	for (i=0; i<count;i++) { 

		var mycookie = get_cookie("player" + i); 
		var mycookie_array = mycookie.split(separator); 

		player_name = mycookie_array[0];
		player_score = parseInt(mycookie_array[1]);

		var player = new player_record(player_name, player_score); 
		player_list.push(player);
	}
}


// this function handles the cookies and score board when the game is over
function game_over() {
	// An array to store all players' record
	var player_list = new Array();
	var p;
	var player_name = null;
	var player_score = score;
	
	get_players_cookies(player_list);                           // load previous records
	player_list.sort(compare_score);

	if (player_list.length < max_player) {
	    player_name = prompt("What is your name?");
	    //player_score = Math.round(Math.random() * 100);
	    
	    p = new player_record(player_name, player_score);
	    player_list.push(p);
	    add_player_cookies(p, player_list.length);
	}
	
	//if the score is in the top ten
	if ((player_list.length >= max_player) && (player_list[max_player-1].score < player_score))
	{
		out = player_list.pop();
		player_name = prompt("What is your name?");
		p = new player_record(player_name, player_score);
	    player_list.push(p);
		//add_player_cookies(p, player_list.length);
	    for (i=0; i<player_list.length; i++) {
	        set_player_cookies(player_list[i], i);
	    }
		
	}
	
	player_list.sort(compare_score);
	show_score_board(player_list);
	setTimeout("again()", 1000);

}

function again() {
	if (confirm("Do you want to play again?"))
		window.location.reload();
}

function compare_score (a,b) {
    if (a.score > b.score) return -1;
    if (a.score < b.score) return 1;
    return 0;
}

function set_player_cookies(player_record, index) {
	
	// expiration date, cookie expires in one year (actually, 365 days)
	var now = new Date();											//now = expiry date
    now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000);			//now = 1 year later
    
 	// set the cookies
	set_cookie("player" + index, player_record.name + separator + player_record.score, now);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -