python实现微信打飞机游戏,写一个似微信的打飞机游戏

点评:那篇文章首要介绍了html5落实Wechat自慰游戏,需求的相恋的人能够参考下

 前段时间几天读PHP内核快抑郁了,听软乎乎说的这些娱乐能够还专程更新了下Wechat,深负众望!此游玩毫无可玩性!拿HTML5来娱乐下,相当久早前看过的HTML5 API, 烂的风度翩翩逼,勿喷: 

# -*- coding: utf-8 -*-

import pygame
from sys import exit
import random

pygame.init()
screen = pygame.display.set_mode((450, 600), 0, 32)
background = pygame.image.load("back.jpg").convert()
plane = pygame.image.load("plane.png").convert_alpha()
pygame.display.set_icon(plane)
pygame.display.set_caption("打飞机")

class Enemy:
        def restart(self):
                #重置敌机位置和速度
                self.x = random.randint(50, 400)
                self.y = random.randint(-200, -50)
                self.speed = random.random() + 0.1

        def __init__(self):
                        #初始化
                self.restart()
                self.image = pygame.image.load('enemy.png').convert_alpha()

        def move(self):
                if self.y < 600:
                        #向下移动
                    self.y += 0.3
                else:
                        #重置
                    self.restart()
#enemy = Enemy()
enemies = []
for i in range(3):
    enemies.append(Enemy())

class Bullet:
        def __init__(self):
                #初始化成员变量,x,y,image
                self.x = 0
                self.y = -1
                self.image = pygame.image.load('bullet.png').convert_alpha()
                self.active = False
        def restart(self):
                mouseX, mouseY = pygame.mouse.get_pos()
                self.x = mouseX - self.image.get_width() / 2
                self.y = mouseY - self.image.get_height() /2
                self.active = True
        def move(self):
                #处理子弹的运动
                if self.y < 0:
                        self.active = False
                if self.active:
                        self.y -= 3          
#创建子弹的list
bullets = []
#向list中添加5发子弹
for i in range(5):
    bullets.append(Bullet())
#子弹总数
count_b = len(bullets)
#即将激活的子弹序号
index_b = 0
#发射子弹的间隔
interval_b = 0

class Plane:
    def restart(self):
        self.x = 200
        self.y = 600

    def __init__(self):
        self.restart()
        self.image = pygame.image.load('plane.png').convert_alpha()

    def move(self):
        x, y = pygame.mouse.get_pos()
        x-= self.image.get_width() / 2
        y-= self.image.get_height() / 2
        self.x = x
        self.y = y

plane = Plane()
bullet = Bullet()
enemy = Enemy()
def checkHit(enemy, bullet):
        if (bullet.x > enemy.x and bullet.x < enemy.x + enemy.image.get_width()) and (bullet.y > enemy.y and bullet.y < enemy.y + enemy.image.get_height()):
            enemy.restart()
            bullet.active = False
            return True
        return False

def checkCrash(enemy, plane):
    if (plane.x + 0.7*plane.image.get_width() > enemy.x) and (plane.x + 0.3*plane.image.get_width() < enemy.x + enemy.image.get_width()) and (plane.y + 0.7*plane.image.get_height() > enemy.y) and (plane.y + 0.3*plane.image.get_height() < enemy.y + enemy.image.get_height()):
        return True
    return False

gameover = False
score = 0
Hscore = []
font = pygame.font.SysFont('楷体', 16)
text1 = font.render(u"点击鼠标左键重新开始", 1, (0, 0, 0))

while True:
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    exit()
                #判断在gameover状态下点击了鼠标
                if gameover and event.type == pygame.MOUSEBUTTONUP:
                    #重置游戏
                    plane.restart()
                    for e in enemies:
                        e.restart()
                    for b in bullets:
                        b.active = False
                    score = 0
                    gameover = False
        screen.blit(background, (0,0))  
        if not gameover:
                interval_b -= 1
                if interval_b < 0:
                        bullets[index_b].restart()
                        interval_b = 100
                        index_b = (index_b+1) % count_b
                for b in bullets:
                        if b.active:
                                for e in enemies:
                                        if checkHit(e, b):
                                                score += 100
                                        if checkCrash(e, plane):
                                                gameover = True

                                b.move()
                                screen.blit(b.image, (b.x-23, b.y))
                                screen.blit(b.image, (b.x+25, b.y))
                for e in enemies:
                        e.move()
                        screen.blit(e.image, (e.x, e.y))
                plane.move()
                screen.blit(plane.image, (plane.x, plane.y))
                text = font.render("Socre:%d" % score, 1, (0, 0, 0))
                screen.blit(text, (0, 0))
        else:
                screen.blit(text, (0, 0))
                screen.blit(text1,(100,32))
                Hscore.append(score)
                text2 = font.render(u"HScore:%d" % sorted(Hscore)[-1], 1, (0, 0, 0))
                screen.blit(text2, (250, 0))
                pass
        pygame.display.update()

html5兑现Wechat的自慰游戏,利用那些小游戏学习一个HTML5吧,那是开拓WEB的多个主旋律

资料及源码打包的在此边。。

 

代码如下:

// JavaScript Document
var c = document.getElementById("dotu");
var cxt = c.getContext("2d");
var img = newImg("./assets/bg_01.jpg");
var fps;
cxt.drawImage(img,0,0,480,800);

var flivverLog = 0;
var flivver1 = newImg("./assets/flivver.png");
var flivver2 = newImg("./assets/flivver2.png");
var flivver3 = newImg("./assets/flivver3.png");

// 用于记录游戏的时间,越到后面越快
var time1 = 0;
var time2 = 80;

// 积分
var jifen = 0;

function getSudu(){
    var number = parseInt(Math.random()*10);
    if(number < 5 && number > 0){
        return number;
    }
    return 1;
}
// 飞机的对象
function flivverObj(hp,ewidth,eheight,eimg,esudu){
    // 随机的X
    this.x = parseInt(Math.random()*460+1);
    this.y = 0;
    // 血量
    this.hp = hp;
    // 挨打   
    this.hit = 0;
    // 是否死亡
    this.over = 0;

    this.width = ewidth;
    this.height = eheight;
    this.img = eimg;
    this.sudu = esudu;
}

// 获取飞机
function getFlivver(type){
    switch(type){
        case 1:
            return new flivverObj(100,50,30,flivver1,getSudu());
        case 2:
            return new flivverObj(500,70,90,flivver2,getSudu());
        case 3:
            return new flivverObj(1000,110,170,flivver3,getSudu());
    }
}
function cartridge(x,y){
    this.x = x;
    this.y = y; 
}

function gameover(){
    window.clearTimeout(fps);
    //$('#dotu').fadeOut();
    $('.content').css('position','relative');
    $('.content').append('');
    $('#sil').html('你').hide().fadeIn(1000,function(){
        $(this).html('你屎').hide().fadeIn(1000,function(){
            $(this).html('<a href="javascript:location.reload();" style="color:#cc0000" title="重新开始">你屎了</a><br>' + jifen  + ' 分').hide().fadeIn();
        }); 
    });
}

(function(cxt){
    var dotu = {nums:0};
    // 用于存放小飞机
    var flivver = new Array();
    var flivverImg = newImg("./assets/flivver.png");
    // 自己
    var me = {x:240,y:750};
    var meImg = newImg('assets/me.png');
    // 子弹
    var cartridges = new Array();
    var cartridgeImg = newImg('./assets/cartridge.png');

    var boo1 = newImg('./assets/boo1.png');
    var over = newImg('./assets/over.png');
    // 
    dotu.update = function(){

        dotu.setTimes();
        // 设置背景
        dotu.setBg();
        // 设置小飞机
        dotu.setFlivver();
        // 画自己
        dotu.setMe();
        // 子弹
        dotu.cartridge();


        cxt.font = "italic 20px 微软雅黑";
        cxt.strokeText("积分:" + jifen, 10, 30);

        $('#fjs').html(flivver.length);
        $('#zds').html(cartridges.length);
        $('#scfj').html("1000/" + time2 + " 毫秒");
    }

    dotu.setTimes = function(){
        time1++ ;
        // 100 秒 1个档位
        if(time1 == 1000){
            time1 = 0;
            time2 = (time2 == 20) ? 20 : time2 - 20;
        }

    }


    /**
     * 设置移动的背景
     */
    dotu.setBg = function(){
        dotu.nums++;
        if(dotu.nums == 800){
            dotu.nums = 0;  
        }
        // 画布的背景
        cxt.drawImage(img,0,dotu.nums,480,800);
        cxt.drawImage(img,0,dotu.nums - 800,480,800);
    }

    dotu.setFlivver = function(){
        // 生成飞机
        if(dotu.nums % time2 == 0){
            flivverLog++;
            if(flivverLog % 6 == 0){
                flivver.push(getFlivver(2));
            }else if(flivverLog % 13 == 0){
                flivver.push(getFlivver(3));
            }else{
                flivver.push(getFlivver(1));
            }

        }

        for(a in flivver){



            flivver[a].y += flivver[a].sudu;
            // 如果超出屏幕将该小飞机删除
            if(flivver[a].y > 780){
                flivver.splice(a, 1);
            }
            // 将小飞机画到画布上


            // 小飞机死亡
            if(flivver[a].over > 0){
                flivver[a].over --;

                if(flivver[a].over > 20){
                    cxt.drawImage(boo1,flivver[a].x + flivver[a].width/2 - 20  ,flivver[a].y + flivver[a].height / 2 -10,41,39);
                }else if(flivver[a].over > 2){
                    cxt.drawImage(over,flivver[a].x + flivver[a].width/2 - 20 ,flivver[a].y + flivver[a].height / 2 -10,40,43);
                }else{
                    flivver.splice(a, 1);
                }



            }else{
                cxt.drawImage(flivver[a].img,flivver[a].x,flivver[a].y,flivver[a].width,flivver[a].height);
                // 判断自己是否死亡
                if( me.x > (flivver[a].x - flivver[a].width + 20) && (me.x) <(flivver[a].x + flivver[a].width - 20) && (me.y) < (flivver[a].y + flivver[a].height + 20) && (me.y + 72) > (flivver[a].y - 20)){
                    gameover();
                }

                if(flivver[a].hit > 0){
                    cxt.drawImage(boo1,flivver[a].x + flivver[a].width/2 - 20 ,flivver[a].y + flivver[a].height / 2 -10,41,39);
                    //cxt.drawImage(boo1,flivver[a].x + 5 ,flivver[a].y,41,39);
                    flivver[a].hit--;
                }
            }

        }
    }

    // 更新自己的距离
    dotu.setMe = function(){
        cxt.drawImage(meImg,me.x,me.y,64,72);
    }

    // 更新子弹方法
    dotu.cartridge = function(){
        if(dotu.nums % 10 == 0){
            cartridges.push(new cartridge(me.x + 30,me.y));
        }

        for(i in cartridges){
            // 飞到顶部就将OBJ删除掉
            if(cartridges[i].y < 0){
                cartridges.splice(i, 1);
                continue;
            }


            cartridges[i].y -= 20;
            // 将小飞机画到画布上
            cxt.drawImage(cartridgeImg,cartridges[i].x,cartridges[i].y,7,17);

            // 子弹碰到飞机的情况
            for(j in flivver){
                if(flivver[j].over > 0){
                    continue;
                }
                if(cartridges[i].x > flivver[j].x && cartridges[i].x < flivver[j].x+ flivver[j].width && cartridges[i].y >  flivver[j].y && cartridges[i].y -flivver[j].height < flivver[j].y){

                    flivver[j].hit = 10;
                    $('#isdz').html('打中了编号' + j);

                    if(flivver[j].hp > 1){
                        flivver[j].hp -= 80;
                    }else{
                        flivver[j].over = 40;
                        jifen += 50000;
                    }
                    // 子弹消失
                    cartridges.splice(i, 1);
                    break;
                }
            }
        }
    }

    // 绑定鼠标事件
    c.addEventListener('mousemove', function onMouseMove(evt) {
        me.x = evt.layerX - $('#dotu').offset().left - 32;
        me.y = evt.layerY -  36 ;
        $('#sbX').html(me.x);
        $('#sbY').html(me.y);
    });

    fps = setInterval(dotu.update, 1000/100); 
}(cxt))


function newImg(src){
    var obj = new Image();
    obj.src = src;
    return obj;
}

//setInterval(h.update, 1000/65);

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>打飞机 - 多途</title>
<script type="text/javascript" src="./jquery.min.1.7.1.js"></script>
<style>
body{padding:0; margin:0; text-align:center}
.content{border:1px #000 solid; width:480px; margin:0 auto; height:800px; display:block; font-size:72px;}
.info,.blog{border:1px #000 solid; position:fixed; top:5px; right:5px; width:150px; text-align:left}
.blog{ left:10px; background:#000; text-align:center; width:100px}
.blog a{ color: #FFF; text-decoration:none; font-size:15px; }
</style>
</head>
<body>
<div class="content"><canvas id="dotu" width="480" height="800"></canvas></div>
<div class="blog"><a href="/">回到博客首页</a></div>
<div class="info">
    鼠标X:<br>鼠标Y:<br>小飞机数:<br>子弹数:<br>打中:<br>生成飞机时间:

</div>
<script type="text/javascript" src="./dotu_game.js"></script>
</body>
</html>

// JavaScript Document
var c = document.getElementById(“dotu”);
var cxt = c.getContext(“2d”);
var img = newImg(“./assets/bg_01.jpg”);
var fps;
cxt.drawImage(img,0,0,480,800);

var flivverLog = 0;
var flivver1 = newImg(“./assets/flivver.png”);
var flivver2 = newImg(“./assets/flivver2.png”);
var flivver3 = newImg(“./assets/flivver3.png”);

// 用于记录游戏的光阴,越到背后越快
var time1 = 0;
var time2 = 80;

// 积分
var jifen = 0;

function getSudu(){
var number = parseInt(Math.random()*10);
if(number < 5 && number > 0){
return number;
}
return 1;
}
// 飞机的对象
python实现微信打飞机游戏,写一个似微信的打飞机游戏。function flivverObj(hp,ewidth,eheight,eimg,esudu){
// 随机的X
this.x = parseInt(Math.random()*460+1);
this.y = 0;
// 血量
this.hp = hp;
// 挨打
this.hit = 0;
// 是还是不是驾鹤归西
this.over = 0;

this.width = ewidth;
this.height = eheight;
this.img = eimg;
this.sudu = esudu;
}

// 获取飞机
function getFlivver(type){
switch(type){
case 1:
return new flivverObj(100,50,30,flivver1,getSudu());
case 2:
return new flivverObj(500,70,90,flivver2,getSudu());
case 3:
return new flivverObj(1000,110,170,flivver3,getSudu());
}
}
function cartridge(x,y){
this.x = x;
this.y = y;
}

function gameover(){
window.clearTimeout(fps);
//$(‘#dotu’).fadeOut();
$(‘.content’).css(‘position’,’relative’);
$(‘.content’).append(‘<span style=”position:absolute; top:5px;
left:2px; font-size:150px; color:#cc0000; text-align:center”
id=”sil”></span>’);
$(‘#sil’).html(‘你’).hide().fadeIn(1000,function(){
$(this).html(‘你屎’).hide().fadeIn(1000,function(){
$(this).html(‘<a href=”javascript:location.reload();”
style=”color:#cc0000″ title=”重新最初”>你屎了</a>
‘ + jifen + ‘ 分’).hide().fadeIn();
});
});
}

(function(cxt){
var dotu = {nums:0};
// 用于存放小飞机
var flivver = new Array();
var flivverImg = newImg(“./assets/flivver.png”);
// 自己
var me = {x:240,y:750};
var meImg = newImg(‘assets/me.png’);
// 子弹
var cartridges = new Array();
var cartridgeImg = newImg(‘./assets/cartridge.png’);

var boo1 = newImg(‘./assets/boo1.png’);
var over = newImg(‘./assets/over.png’);
//
dotu.update = function(){

dotu.setTimes();
// 设置背景
dotu.setBg();
// 设置小飞机
dotu.setFlivver();
// 画自己
dotu.setMe();
// 子弹
dotu.cartridge();

网站地图xml地图