精华内容
下载资源
问答
  • 端午节用MATLAB制作一款龙舟小游戏

    万次阅读 多人点赞 2021-06-14 11:29:13
    text(50,200,'游戏结束','FontSize',54,'Color','w','tag','txt') end end 6 完整代码 function dragonBoat Mainfig=figure('units','pixels','position',[50 100 760 400],... 'Numbertitle','off','menubar','...

    效果图:
    没找到合适的背景就自己画了个,大家如果有更好看的可以换一下。。。
    在这里插入图片描述
    在这里插入图片描述

    步骤

    1 创建Axes及图片导入

    窗口创建:

    Mainfig=figure('units','pixels','position',[50 100 760 400],...
                           'Numbertitle','off','menubar','none','resize','off',...
                           'name','dragonBoat');
    axes('parent',Mainfig,'position',[0 0 1 1],...
       'XLim', [0 760],...
       'YLim', [0 400],...
       'NextPlot','add',...
       'layer','bottom',...
       'Visible','on',...
       'YDir','reverse',...
       'XTick',[], ...
       'YTick',[]);
    

    图片导入:

    [bkg_C,~,~]=imread('river.png');
    [boat_C,~,boat_Alp]=imread('boat.png');
    [stone_C,~,stone_Alp]=imread('stone.png');
    

    图片素材可以从这里拿哟:
    百度网盘链接:https://pan.baidu.com/s/1t1KxW0zCM3N9ovEe-5Mp2Q
    提取码:czd8

    2 创建timer函数移动背景

    DrawBkgHdl=image([0 760],[0 400],bkg_C);
    
    t=0;
    tempBkg_C=[bkg_C,bkg_C];
    fps = 20;
    game = timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @dragongame);
    start(game)
    
    	function dragongame(~,~)
            t=t+6;
            modt=mod(t,720);
            
            newBkg_C=tempBkg_C(:,1+modt:684+modt,:);
            set(DrawBkgHdl,'CData',newBkg_C) 
        end
    

    在这里插入图片描述

    3 绘制石块并移动

    其实是5个石块来回变位置,当一个石块位置减小到负数就把数值增加并重新绘制

    stonePos=[600;870;1140;1410];
    stonePos=[stonePos,randi([90,330],[4,1])];
    for i=1:size(stonePos,1)
        drawStoneHdl(i)=image([stonePos(i,1)-39 stonePos(i,1)+39],[stonePos(i,2)-20 stonePos(i,2)+20],stone_C,'AlphaData',stone_Alp);
    end
    
    	function dragongame(~,~)
    
    		%这里是之前写的背景部分代码
    		%。。。。。。。。。。。
    		%。。。。。。。。。。。
    		
            stonePos(:,1)=stonePos(:,1)-20/3;
            stonePos(stonePos(:,1)<0,2)=randi([90,330],[1,1]);
            stonePos(stonePos(:,1)<0,1)=stonePos(stonePos(:,1)<0,1)+1080;
            for ii=1:size(stonePos,1)
                set(drawStoneHdl(ii),'XData',[stonePos(ii,1)-39 stonePos(ii,1)+39],...
                    'YData',[stonePos(ii,2)-20 stonePos(ii,2)+20]);
            end
        end
    

    在这里插入图片描述

    4 绘制船并创建鼠标回调

    boatPos=[380,200];
    DrawBoatHdl=image([boatPos(1)-75 boatPos(1)+75],[boatPos(2)-50 boatPos(2)+50],boat_C,'AlphaData',boat_Alp);
    
    set(gcf,'WindowButtonMotionFcn',@moveBoat,'tag','mov')
    
    	function moveBoat(~,~)
            xy=get(gca,'CurrentPoint');
            temp_y=xy(1,2);
            temp_y(temp_y<100)=90;
            temp_y(temp_y>340)=330;
            boatPos=[380,temp_y];
            set(DrawBoatHdl,'YData',[temp_y-50 temp_y+50]);
        end
    

    在这里插入图片描述

    5 碰撞判断函数

    	function flag=judge(Bpos,Spos)
            flag1=abs(Bpos(1)-Spos(:,1))<80;
            flag2=abs((Bpos(2)+35)-Spos(:,2))<30;
            flag3=flag1&flag2;
            flag=any(flag3);
        end
    

    dragongame函数做如下改写

        function dragongame(~,~)
        
    		%这里是之前一大堆代码
    		%。。。。。。。。。。
    		%。。。。。。。。。。
    		%。。。。。。。。。。
    
            if judge(boatPos,stonePos)
                stop(game)
                set(gcf,'WindowButtonMotionFcn',[]); 
                text(50,200,'游戏结束','FontSize',54,'Color','w','tag','txt')
            end
        end
    

    6 完整代码

    function dragonBoat
    
    
    Mainfig=figure('units','pixels','position',[50 100 760 400],...
                           'Numbertitle','off','menubar','none','resize','off',...
                           'name','dragonBoat');
    axes('parent',Mainfig,'position',[0 0 1 1],...
       'XLim', [0 760],...
       'YLim', [0 400],...
       'NextPlot','add',...
       'layer','bottom',...
       'Visible','on',...
       'YDir','reverse',...
       'XTick',[], ...
       'YTick',[]);
    [bkg_C,~,~]=imread('river.png');
    [boat_C,~,boat_Alp]=imread('boat.png');
    [stone_C,~,stone_Alp]=imread('stone.png');
    
    
    DrawBkgHdl=image([0 760],[0 400],bkg_C);
    
    stonePos=[600;870;1140;1410];
    stonePos=[stonePos,randi([90,330],[4,1])];
    for i=1:size(stonePos,1)
        drawStoneHdl(i)=image([stonePos(i,1)-39 stonePos(i,1)+39],[stonePos(i,2)-20 stonePos(i,2)+20],stone_C,'AlphaData',stone_Alp);
    end
    
    boatPos=[380,200];
    DrawBoatHdl=image([boatPos(1)-75 boatPos(1)+75],[boatPos(2)-50 boatPos(2)+50],boat_C,'AlphaData',boat_Alp);
    
    t=0;
    tempBkg_C=[bkg_C,bkg_C];
    fps = 20;
    game = timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @dragongame);
    start(game)
    
    text(10,20,['已前进',num2str(t),'米'],'FontSize',14,'Color','w','tag','txt');
    
    set(gcf,'WindowButtonMotionFcn',@moveBoat,'tag','mov')
    
    
        function dragongame(~,~)
            t=t+6;
            modt=mod(t,720);
            
            newBkg_C=tempBkg_C(:,1+modt:684+modt,:);
            set(DrawBkgHdl,'CData',newBkg_C) 
            
            stonePos(:,1)=stonePos(:,1)-20/3;
            stonePos(stonePos(:,1)<0,2)=randi([90,330],[1,1]);
            stonePos(stonePos(:,1)<0,1)=stonePos(stonePos(:,1)<0,1)+1080;
            for ii=1:size(stonePos,1)
                set(drawStoneHdl(ii),'XData',[stonePos(ii,1)-39 stonePos(ii,1)+39],...
                    'YData',[stonePos(ii,2)-20 stonePos(ii,2)+20]);
            end
            set(findobj('tag','txt'),'String',['已前进',num2str(t),'米']);
            
            if judge(boatPos,stonePos)
                stop(game)
                set(gcf,'WindowButtonMotionFcn',[]); 
                text(50,200,'游戏结束','FontSize',54,'Color','w','tag','txt')
            end
        end
    
        function moveBoat(~,~)
            xy=get(gca,'CurrentPoint');
            temp_y=xy(1,2);
            temp_y(temp_y<100)=90;
            temp_y(temp_y>340)=330;
            boatPos=[380,temp_y];
            set(DrawBoatHdl,'YData',[temp_y-50 temp_y+50]);
        end
    
        function flag=judge(Bpos,Spos)
            flag1=abs(Bpos(1)-Spos(:,1))<80;
            flag2=abs((Bpos(2)+35)-Spos(:,2))<30;
            flag3=flag1&flag2;
            flag=any(flag3);
        end
    end
    

    在这里插入图片描述

    展开全文
  • 使用VS制作一小游戏(五子棋)

    千次阅读 多人点赞 2019-07-25 01:35:21
    使用VS制作一小游戏(五子棋) 一、前期准备: 下载Visual Studio(以下使用的是VS2017) 下载Easyx库:官方easyx库下载 右上方下载 二、思路理解 (本次是简单的单机双人五子棋) 1、初始化一个15*15的棋盘,将...

    使用VS制作一个小游戏(五子棋)

    一、前期准备:

    下载Visual Studio(以下使用的是VS2017)
    下载Easyx库:官方easyx库下载 右上方下载

    二、思路理解

    (本次是简单的单机双人五子棋)

    1、初始化一个15*15的棋盘,将空棋盘每个位置赋值0

    2、若玩家1放下一颗棋子,则将棋盘上的值置为1,玩家2同理

    三、完整代码

    #include <iostream>
    #include<graphics.h>
    using namespace std;
    
    int a[15][15] = { 0 }; //定义棋盘的全局变量
    MOUSEMSG mouse; //定义鼠标的全局变量
    
    //自定义的子函数
    void init();		//初始化界面
    void put(int penson, int x, int y); //在二位数组将元素置为非空,相当于放下棋子
    void drow_Black(int x, int y);		//画黑棋
    void drow_White(int x, int y);		//画白棋
    int change(short k);				//将棋盘与二位数组映射,方便判断输赢
    void show(int person);				//胜利时显示的界面
    bool Check_Win(int person, int x, int y);	//调用各种函数,判断是否胜利
    bool Check_LeftAndRight(int person, int x, int y);	//检索棋盘左右是否五颗相连
    bool Check_TopAndButton(int person, int x, int y);	//检索棋盘上下是否五颗相连
    bool Check_LeftAndDiagonal(int person, int x, int y);	//检索棋盘左斜是否五颗相连
    bool Check_RightAndDiagonal(int person, int x, int y);	//检索棋盘右斜是否五颗相连
    
    int main()
    {
    	//加载画面
    	init();
    	int x, y;
    	int person=1;
    	FlushMouseMsgBuffer();// 清空鼠标消息缓冲区
    	while (true)
    	{
    		mouse = GetMouseMsg();// 获取一个鼠标消息。如果没有,就等待
    		if (mouse.uMsg == WM_LBUTTONDOWN)	//是否按鼠标左键
    		{
    			x = change(mouse.x);
    			y = change(mouse.y);
    			if (x >= 0 && x < 15 && y >= 0 && y < 15)
    			{
    				if (a[x][y] == 0)
    				{
    					if (person == 1)
    					{	//画黑键
    						drow_Black(x, y);
    						//给数组位置赋值
    						put(person, x, y);
    						//判断是否胜利
    						if (Check_Win(person, x, y))
    						{
    							show(person);
    							system("pause");
    						}
    						person = 2;
    					}
    					else
    					{
    						drow_White(x, y);
    						//给数组位置赋值
    						put(person, x, y);
    						//判断是否胜利
    						if (Check_Win(person, x, y))
    						{
    							show(person);
    							system("pause");
    						}
    						person = 1;
    					}
    				}
    			}			
    		}
    	}
    	return 0;
    }
    
    
    //初始化系统
    void init()
    {
    	initgraph(720, 600); // 初始图形化界面,宽高	
    	loadimage(NULL, "1.jpg");				//背景图片
    	//给幕布画线
    	setlinecolor(BLACK);
    	//line(int x1, int y1, int x2, int y2);		// 画线
    	for (int i = 50; i <= 500; i += 30)
    		line(50, i, 500, i);
    	for (int i = 50; i <= 500; i += 30)
    		line(i, 50, i, 500);
    }
    
    //放下棋子
    void put(int penson, int x, int y)
    {
    	//玩家1则置为1,玩家2则置为2
    	if (penson == 1)
    	{
    		a[x][y] = 1;
    	}
    	else
    	{
    		a[x][y] = 2;
    	}
    }
    
    //画黑键
    void drow_Black(int x, int y)
    {
    	setfillcolor(BLACK);
    	int x1 = 50 + x * 30 + 15;
    	int y1 = 50 + y * 30 + 15;
    	fillcircle(x1, y1, 10);
    }
    
    //画白键
    void drow_White(int x, int y)
    {
    	setfillcolor(WHITE);
    	int x1 = 50 + x * 30 + 15;
    	int y1 = 50 + y * 30 + 15;
    	fillcircle(x1, y1, 10);
    }
    
    //棋盘与二维数组的映射
    int change(short k)
    {
    	int n = (k - 50) / 30;
    	int n1 = (k - 50) % 30;
    	if (n1 > 0)
    	{
    		n = n + 1;
    	}
    	return n - 1;
    }
    
    //展示胜利框
    void show(int person)
    {
    	cleardevice();//清空画布
    	loadimage(NULL, "11.jpg");
    	//setbkcolor(0x005498);//设置背景颜色
    	settextcolor(RGB(60, 100, 150));//设置字体颜色
    	settextstyle(80, 20, _T("微软雅黑"));
    	if (person == 1)
    	{
    		outtextxy(130, 350, _T("黑色方,你赢了!"));
    	}
    	else
    	{
    		outtextxy(130, 350, _T("白色方,你赢了!"));
    	}
    
    }
    
    //检索左右
    bool Check_LeftAndRight(int person, int x, int y)
    {
    	int count = 0;
    	int flag[15] = { 0 };
    	//左右同时检索
    	for (int i = 0; i <= 15; i++)
    	{
    		if (x - i >= 0 && a[x - i][y] == person)
    		{
    			flag[x - i] = person;
    		}
    		else if (x + i <= 14 && a[x + i][y] == person)
    		{
    			flag[x + i] = person;
    		}
    	}
    
    	for (size_t i = 0; i < 15; i++)
    	{
    		if (flag[i] != 0)
    		{
    			count++;
    		}
    		else if (count == 5)
    		{
    			return true;
    		}
    		else
    		{
    			count = 0;
    		}
    	}
    	return false;
    }
    
    //检索上下
    bool Check_TopAndButton(int person, int x, int y)
    {
    	int count = 0;
    	int flag[15] = { 0 };
    	//上下同时检索
    	for (int i = 0; i <= 15; i++)
    	{
    		if (y - i >= 0 && a[x][y - i] == person)
    		{
    			flag[y - i] = person;
    		}
    		else if (y + i <= 14 && a[x][y + i] == person)
    		{
    			flag[y + i] = person;
    		}
    	}
    
    	for (size_t i = 0; i < 15; i++)
    	{
    		if (flag[i] != 0)
    		{
    			count++;
    		}
    		else if (count == 5)
    		{
    			return true;
    		}
    		else
    		{
    			count = 0;
    		}
    	}
    	return false;
    }
    //检索左倾斜角
    bool Check_LeftAndDiagonal(int person, int x, int y)
    {
    	int count = 0;
    	int flag[15] = { 0 };
    	//倾斜上下同时检索
    	for (int i = 0; i <= 15; i++)
    	{
    		if (x - i >= 0 && y - i >= 0 && a[x - i][y - i] == person)
    		{
    			flag[x - i] = person;
    		}
    		else if (x + i < 15 && y + i < 15 && a[x + i][y + i] == person)
    		{
    			flag[x + i] = person;
    		}
    	}
    
    	for (size_t i = 0; i < 15; i++)
    	{
    		if (flag[i] != 0)
    		{
    			count++;
    		}
    		else if (count == 5)
    		{
    			return true;
    		}
    		else
    		{
    			count = 0;
    		}
    	}
    	return false;
    }
    
    //检索右倾斜角
    bool Check_RightAndDiagonal(int person, int x, int y)
    {
    	int count = 0;
    	int flag[15] = { 0 };
    	//倾斜上下同时检索
    	for (int i = 0; i <= 15; i++)
    	{
    		if (x + i < 15 && y - i >= 0 && a[x + i][y - i] == person)
    		{
    			flag[x + i] = person;
    		}
    		else if (x - i >= 0 && y + i < 15 && a[x - i][y + i] == person)
    		{
    			flag[x - i] = person;
    		}
    	}
    
    	for (size_t i = 0; i < 15; i++)
    	{
    		if (flag[i] != 0)
    		{
    			count++;
    		}
    		else if (count == 5)
    		{
    			return true;
    		}
    		else
    		{
    			count = 0;
    		}
    	}
    	return false;
    }
    
    //判断是否胜利
    bool Check_Win(int person, int x, int y)
    {
    	//检查左右
    	if (Check_LeftAndRight(person, x, y))
    	{
    		return true;
    	}
    	//检查上下
    	else if (Check_TopAndButton(person, x, y))
    	{
    		return true;
    	}
    	//检查左斜
    	else if (Check_LeftAndDiagonal(person, x, y))
    	{
    		return true;
    	}
    	//检查右斜
    	else if (Check_RightAndDiagonal(person, x, y))
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    

    四、生成在其他电脑也可执行的exe文件

    五、运行结果


    在这里插入图片描述

    展开全文
  • 因为我也是初学者,我在写这篇博客的同时,可以加深我对JAVA的理解,也希望能帮到那些想要制作一款小游戏的你。 我的目标: 认识JAVA 能够基础的使用JAVA 就这两点,所以我希望看到我这篇文章的新手不要抱着对...

    这是我第一次开始学习JAVA这门语言。
    这也是我用JAVA做的第一款游戏。
    游戏虽然简单,但几乎涵盖了目前我所学习的所有关于JAVA的内容。
    因为我也是初学者,我在写这篇博客的同时,可以加深我对JAVA的理解,也希望能帮到那些想要制作一款小游戏的你。

    我的目标:

    认识JAVA
    能够基础的使用JAVA

    就这两点,所以我希望看到我这篇文章的新手不要抱着对JAVA“崇高的敬意”,那反而会使你学习的过程中畏手畏脚的,当然我是第一次写博客,也希望看到这篇的博客的大牛能给予斧正!

    首先,你需要一个JAVA开发环境,这里我就帮你提供了所需要的包
    我发现oracle公司的java软件包也是一直在更新的,但是链接会过期,所以就直接发上下载的官网:
    https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    在这里插入图片描述
    点击Accept License Agreement不然你无法下载下面的东西
    在这里插入图片描述
    然后32位的电脑下载x86,64位的电脑下载x64

    下载完成后安装的时候记得保存下安装的目标地址,因为配置环境变量需要用到(假设你是在windows系统上):

    在桌面 右键点击 “此电脑”的“属性”选项,
    在弹出的窗口左侧找到“高级系统设置”点击,
    然后在弹出的窗口右下角找到“环境变量”,
    再在下面“系统变量”下的“新建
    变量名为“JAVA_HOME”,变量值为JAVA开发环境的(就是之前下载的文件的安装目录)安装的目录,默认情况下该值为“C:\Program Files\Java\jdk1.8.0_201\”,当然自己选择目录的话就按自己装的写
    再“新建”变量名为“CLASSPATH”,变量值为**“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(引号里面的全都要)这个可以直接照抄。
    再找到“Path”变量,在最前面加上
    .;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”**(引号里面的全都要)
    如果是win10可能会出现如下的列表选项
    在这里插入图片描述
    那么依次添加下面的两条即可
    在这里插入图片描述
    最后打开命令提示符,分别输入"java"和"javac",如果跳出是下图的样式,那么你的环境便配置成功了!
    这里写图片描述
    这里写图片描述

    我的JAVA开发软件是Eclipse,它是一个IDE(Integrated Development Environment),我们所写的代码在我们写完之后,生成程序,需要经过编译和连接,才能转化成计算机所能读懂的“语言”,而IDE所做的就是帮助你完成编译和连接过程。
    同样我把Eclipse的安装包也给你准备好了:
    32位:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/photon/R/eclipse-jee-photon-R-win32.zip
    64位:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/photon/R/eclipse-jee-photon-R-win32-x86_64.zip
    这都是绿色版的下载好后找个地方解压了就能用,跟安装版一样,比安装版简洁多了。
    第一次启动eclipse会跳出一个让你选择工作目录的界面,就是存放你项目的地方,选择好之后可以勾上左下角的选项,这样每次启动都会默认这个目录。
    打开之后,啊还是熟悉的英文界面,有些人可能需要汉化包,我是用英文版的(推荐),汉化包你就自己去找吧,我记得安装也挺烦的。

    工具都弄好了,接下来终于可以干活了!
    打开eclipse,依次点击左上角的"File",“new”,“java project
    这里写图片描述
    在弹出的界面“project name”一栏输入这个项目的名称,可以自己随便取。
    这里写图片描述
    再在左边的导航栏(我喜欢这么叫,至于它真名叫Package Explorer)找到你创建的项目,展开(就是点下项目左边“>”这个符号)找到src文件夹,再右键src,“new”,“package”,然后输入名字你就可以创建一个包了,包的作用简单的说就是将不同的类放在不同的包中,方便我们清晰的使用,但包的名字注意不能随便写,一般我们把公司的完整域名倒过来作为包的名称,比如“www.java.com”,这是java的官方域名,那他们开发包的时候所用的名称就是"com.java.www",这个时候你说我没有域名怎么办?给自己未来的公司先想一个域名写上去呗~

    然后,在创建好的包上右键“new”,“class”,然后输入名字就可以创建一个位于该包下的一个类,类名字的规范我们一般以首字母大写,或者多个单词的首字母大写例如“TestPlane”.
    这里写图片描述

    那么我们准备工作就到此结束了。

    展开全文
  • 抽出1个小时制作一款简单的物理小游戏(绳子原理)

    万次阅读 多人点赞 2013-04-04 11:34:06
    晚上回家后我试着将其中一款游戏用html5还原了一下,第二天给大家玩儿,在公司的人气爆火,尤其女生,边玩边叫,“おもしろい!!”,“難しい!!”...。一般大家看到女生喜欢,肯定急切想知道是什么游戏吧?游戏...

    前天公司聚会,在一起玩游戏,游戏虽然及其简单,但是却很适合在活动中玩,因为公司参加聚会的人比较多,所以只有一部分人玩到了。晚上回家后我试着将其中一款游戏用html5还原了一下,第二天给大家玩儿,在公司的人气爆火,尤其女生,边玩边叫,“おもしろい!!”,“難しい!!”...。

    一般大家看到女生喜欢,肯定急切想知道是什么游戏吧?游戏界面如下。


    看到游戏界面后,估计有几个人已经摔倒在地了吧,就是一个及其简单的物理游戏,游戏开始后,按住鼠标左右划动屏幕,主人公就好像荡秋千一样,越荡越高,等适当的时候松开鼠标,将主人公荡出去,谁飞出去的最远,谁就获胜。

    其实,越是这样简单短小的游戏,越是适合聚会这样的活动中玩,尤其加上排名系统后,大家也会想要排名靠前一些,而争着去玩儿。

    游戏测试连接:

    http://lufylegend.com/demo/box2dJump

    注意:本游戏纯粹是抽了一个小时左右时间随便给公司同事娱乐一下而做的,画面和效率等都没经过优化,请用PC打开,移动端运行起来估计会卡死

    制作开始

    一,准备

    游戏中用到了两个引擎

    一个是HTML5开源引擎lufylegend.js,下面是我在博客的lufylegend-1.7.0发布帖,里面有简单的介绍

    http://blog.csdn.net/lufy_legend/article/details/8719768

    另一个是Box2dWeb,下载地址如下

    http://code.google.com/p/box2dweb/downloads/list

    二,游戏开发

    从游戏界面中可以看到,游戏开发的重点就是一条绳子,在HTML5中如何来实现绳子呢?

    在box2d中是没有绳子的,但是熟悉box2d的朋友们,应该对旋转关节setRevoluteJoint不陌生,实现绳子的话,我们可以把一连串的刚体用旋转关节连接在一起,这样这些刚体摆动起来的话,就跟绳子差不多了。

    看下面的代码,我把1个静态的刚体和20个动态的刚体用旋转关节连接到了一起。

    代码清单1

    var bx = 250,by=40;
        var box01,box02;
    	box01 = new LSprite();
    	box01.x = bx;
    	box01.y = 30;
    	backLayer.addChild(box01);
    	box01.addBodyCircle(10,0,0,0,1,10,0.2);
    	linelist = [box01];
        for(var i=0;i<20;i++){
    	    box02 = new LSprite();
    	    box02.x = bx;
    	    box02.y = by+i*10;
    	    backLayer.addChild(box02);
    	    box02.addBodyCircle(10,0,0,1,1,10,0.2);
    	    LGlobal.box2d.setRevoluteJoint(box02.box2dBody, box01.box2dBody );
    	    linelist.push(box02);
        	box01 = box02;
        }

    最后,在加上一个稍微大一点的刚体,来作为游戏中的主人公,并且也用旋转关节跟前面的刚体连接起来。

    代码清单2

    hero = new LSprite();
    	var bit = new LBitmap(new LBitmapData(imglist["chara03"]));
    	bit.x = -25;
    	bit.y = -20;
    	hero.addChild(bit);
    	hero.bitmap = bit;
    	hero.x = bx;
    	hero.y = by+i*10;
    	backLayer.addChild(hero);
    	hero.addBodyPolygon(30,50,1,2,10,.2);
    	joinline = LGlobal.box2d.setRevoluteJoint(hero.box2dBody, box01.box2dBody );

    这样就差不多了,剩下的就是如何来控制主人公的摇摆和飞出去,这时候需要三个事件。

    代码清单3

    backLayer.addEventListener(LEvent.ENTER_FRAME,onframe);
    	backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,ondown);
    	backLayer.addEventListener(LMouseEvent.MOUSE_UP,onup);
    上面代码中onframe函数是时间轴,ondown和onup分别是鼠标按下和弹起时调用的事件,鼠标按下和弹起比较简单,代码如下。

    代码清单4

    function ondown(event){	
    	if(out)return;
    	monseIsDown = true;	
    	mouseObject.x = event.offsetX;
    }
    function onup(event){	
    	if(out)return;
    	monseIsDown = false;
    	LGlobal.box2d.world.DestroyJoint(joinline);
    	hero.bitmap.bitmapData = new LBitmapData(imglist["chara04"])
    	hero.bitmap.x = 0;
    	hero.bitmap.y = 0;
    	out = true;
    }
    onframe函数里基本上包含了游戏的所有逻辑部分。

    首先,前面制作的“绳子”是没有皮肤的,也就是说除非debug模式,否则是不显示的,那么就要在绳子摆动的时候,顺着这些刚体绘制出一条曲线,就变成了绳子了,代码如下。

    代码清单5

    backLayer.graphics.clear();
    	backLayer.graphics.drawRect(1,"#000000",[0,0,LGlobal.width,LGlobal.height]);
    	for(var i=0;i<linelist.length - 1;i++){
    		backLayer.graphics.drawLine(2,"#000000",[linelist[i].x,linelist[i].y,linelist[i+1].x,linelist[i+1].y]);
    	}
    接着,是让绳子摆动,判断鼠标是否左右晃动,分别向左或者向右给刚体加上一个力,来让刚体动起来,代码如下

    代码清单6

    if(monseIsDown && !out){	
    		if(checkIndex++ > 10){
    			checkIndex = 0;
    			if(LGlobal.offsetX - mouseObject.x > 50){
    				var force = 50;
    				var vec = new LGlobal.box2d.b2Vec2(force,0);
    				hero.box2dBody.ApplyForce(vec, hero.box2dBody.GetWorldCenter());
    			}else if(LGlobal.offsetX - mouseObject.x < -50){
    				var force = 50;
    				var vec = new LGlobal.box2d.b2Vec2(-force,0);
    				hero.box2dBody.ApplyForce(vec, hero.box2dBody.GetWorldCenter());
    			}
    			mouseObject.x = LGlobal.offsetX;
    		}	
    	}	
    最后,在鼠标弹起的时候,由于主人公被弹飞了出去,所以让游戏窗口跟着他一起动起来就可以了。

    代码清单7

    if(!out)return;
    	backLayer.x = LGlobal.width*0.5 - hero.x;
    	if(backLayer.x > 0){
    		backLayer.x=0;
    	}
    	LGlobal.box2d.synchronous();
    	if(!hero.box2dBody.IsAwake() && out){
    		backLayer.removeEventListener(LEvent.ENTER_FRAME,onframe);
    		point = Math.floor((hero.x - 250)*0.1);
    
    		var rank = new GameRanking();
    		backLayer.addChild(rank);
    	}
    整个游戏就这样制作完成了,先在debug模式下预览一下,可以看到我们制作的“绳子”其实就是一串刚体

    而非debug模式下,就成了下面的界面了。

    三,源码

    最后给出本次游戏的源代码

    http://lufylegend.com/lufylegend_download/box2dJump.rar

    注:只含游戏源码,lufylegend.js引擎和box2dweb引擎请看准备部分自己下载
    展开全文
  • 使用THREE.js制作一款3D游戏

    千次阅读 2018-10-05 12:37:31
    使用THREE.js制作一款3D游戏 本文是基于某位大神使用three.js设计游戏的学习心得与知识分享 The Making of “The Aviator”: Animating a Basic 3D Scene with Three.js 前言 这个学期选修了一门计算机图形学的课程...
  • 本文主要介绍如何用Python设计个经典小游戏:猜大小。在这个游戏中,将用到前面我介绍过的所有内容:变量的使用、参数传递、函数设计、条件控制和循环等,做个整体的总结和复习。游戏规则:初始本金是1000元,默认...
  • Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第步,那就更需要比别人努力了。
  • // 绘制个椭圆 g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上角的坐标,使画好的圆恰好在以网格点所在的位置上 // 填充个椭圆 g.setColor(Color.BLACK); g.fillOval(a-Size/4, b-Size/4, ...
  • 用html5编写的一款小游戏

    千次阅读 2014-10-20 11:00:49
    用html5写的一款小游戏,应用脚本控制
  • 我们使用PlayCanvas做了个“掂球”的小游戏,在这个小游戏中玩家需要点击落下的足球使之停留在空中。 本教程包含如下主题: 1 场景(Scene)和层级(Hierarchy) 2 材质设置 3 游戏脚本 4 球体物理和输入 5 ...
  • 使用unity制作一个2D小游戏

    千次阅读 2017-06-04 18:24:46
    个刚接触Unity3D的菜鸟,大牛勿喷,以后请各路大神多多指教! 本文借鉴网上的例子根据自己理解做个详细的文档解释; 以后慢慢扩展功能! 适合untiy初学者.
  • 个好玩的小游戏(纯C语言编写)

    万次阅读 多人点赞 2017-03-12 16:52:40
    这是个类似于飞机大战的游戏,不过目前代码量比较,所以看起来非常简陋游戏界面如下 更新日志,本人将原来的原来的代码有进一步的优化了一下,之前是只有个非常的战机现在更新后可以产生个非常大的战机...
  • 随着纪念碑谷等系列小游戏的出现,unity 等系列游戏引擎逐渐走入非专业人士的视线,通过系列的自学,成功地做出一款类似FLAPPY bird 的小游戏,游戏上传至网盘,供大家交流使用。链接:...
  • Construct2 第制作小游戏

    千次阅读 2017-10-06 14:29:46
    简单聊聊我是怎么制作出这款游戏——————————- 游戏介绍 先简单介绍一下游戏玩法 这款游戏中你可以操控女孩上下左右移动,用鼠标点击丘比,女孩会向丘比发射向日葵,如果丘比被向日葵打中三次,丘比就会...
  • 下载W3Cschool手机App,0基础随时随地学编程导语这又将是一个不定期更新的系列~~~本系列主要将使用到python的pygame模块来教大家制作一些小游戏,每期制作一个。最后都会打包成.exe文件分享给大家~~~So,对于只想玩...
  • 最近微信小游戏开始萌芽,根据老师的要求开始学习cocos creator紧跟互联网的...官方文档上给的第小游戏制作过程确实是比较详细的,但是它没有对用到的每个api做详细的解释,估计目的是让初学者大概了解一下个小游
  • 基于java制作一个飞机小游戏(学习心得)

    万次阅读 多人点赞 2018-08-07 21:12:33
    用了这么久的csdn,都是在观摩大佬们发帖,萌新瑟瑟发抖,不敢说话,甚 至连代码也不能完全读懂。假期在b站自学(可以说是复习)了java课程,尚学堂的 2018版。链接如下:...
  • Unity,游戏。 本文设计了个第人称射击游戏的Demo开发过程,文中对射击游戏的基础功能做了个详细介绍,适用于个基础框架,可以用于个射击游戏的完整开发,请品尝。
  • 游戏采用的是html5中的canvas技术进行制作,并采用了html5中的viewport来初始化在移动端设备的不同屏幕大小下的页面大小。下边为viewpoert的详解: height=device-height, //控制 viewport 的大小,可以指定的...
  • 使用pygame制作贪吃蛇小游戏

    万次阅读 多人点赞 2021-03-17 18:46:31
    使用pygame制作贪吃蛇小游戏开发基本思路效果展示具体实施步骤制作窗口,插入音频与图片绘制蛇与果实 开发基本思路 1、制作窗口,插入音频与图片 2、绘制蛇与果实 3、按键控制 4、生成食物 5、结束判断 效果展示 ...
  • 微信自从有了 “跳跳” 后微信小游戏就开始迅速火爆起来,为跟上这股潮流,相信很多开发者都想探探微信小游戏是如何开发的。下面我就从技术的角度说说一下微信小游戏如何开发的。 附:本文适合有开发经验的人...
  • C# 游戏制作 | ✨ 简易文字小游戏

    千次阅读 多人点赞 2021-04-14 11:18:14
    在学习了一些C#的基础知识后就要做一些小东西来练练手,就比如本文所介绍的个通过用VS中的C#写的个简易文字小游戏 这个小游戏只由个脚本完成,主要是用来拿C#中的一些基础知识完成,比如此脚本中用到的较多的...
  • 初识cocos creator,做一款H5小游戏

    千次阅读 2019-06-09 14:43:05
    小游戏场景制作相关知识。 基础语法讲析。 sunlands-cow demo的讲解。 构建,发布。(h5, 微信小游戏小游戏体验: web 星星:https://hytstart.github.io/star/ h5 小牛:https://hytstart.github.io/cow/ 、...
  • 介绍一款Android小游戏--交互式人机对战五子棋

    万次阅读 多人点赞 2011-07-06 23:51:09
    学习Android系统开发之余,编写了小游戏--交互式人机对战五子棋,自娱自乐。之所以称之为交互式人机对战五子棋,是因为在进入人机对战模式这前,你可以任意设置好开局,同时,在对战过程中,你可以看到机器的...
  • matlab 手把手教你制作五子棋小游戏

    万次阅读 多人点赞 2019-03-24 11:02:12
    想把以前写过的小游戏一款详细教程呀 这两天发现五子棋有个简单的写法 虽然说有点弊端但这个程序真的很简单呀 一共只有70多行 相信大家就算没有基础多查多看也能学会吧嗯哒
  • 前不久看到lufy的博客上,有位朋友想要个RPG游戏引擎,出于兴趣准备动手做做。由于我研究lufylegend有段时间了,对它有一定的依赖性,因此就准备将这个引擎基于lufylegend。暂时命名为lufylegendRPG。毕竟...
  • 上一次,我们实现了对话类,今天就来做一个游戏中必不可少的——人物类。 当然,你完全是可以自己写一个人物类,但是为了方便...如何制作一款HTML5 RPG游戏引擎——第一篇,地图类的实现 http://blog.csdn.net/yo
  • 本人做过几个安卓小游戏,从游戏的制作过程中,总结了一些经验,现在跟大家分享一下。 这几篇博文想介绍一下安卓游戏的基本框架,这些框架在我制作游戏的过程中屡试不爽。 首先说一下游戏界面的制作。游戏制作很...
  •   从PC到移动,数字技术充斥着整个社会,也改变了人们的生活方式。...手机、平板电脑取代了洋娃娃汽车在孩子们心中的位置,游戏、动画成为日常,家长在感叹孩子聪明的同时,又担心孩子会“不务正业”。  ...
  • 本次来说一说如何利用lufylegend.js引擎制作一款html5游戏后将其通过Qt转换成EXE程序。步骤其实非常简单,接下来就一步步地做一下解释和说明。 首先我们来开发一个有点类似于太空大战的游戏游戏截图如下: 游戏...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,797
精华内容 41,918
关键字:

如何制作一款小游戏