百搜论坛欢迎您的加入!
adimg adimg
 
昨日:篇  今日:篇   总帖:篇   会员:
博主最大Lv63   
JS实现简易版贪吃蛇小游戏     

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>

    <title>新建网页</title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <meta name="description" content=""/>

    <meta name="keywords" content=""/>

 

    <script type="text/javascript">

        //① 绘制地图

        function Map() {

            //私有成员(不会随便发生变化)

            var w = 800;

            var h = 400;

 

            //成员方法,绘制地图

            this.showmap = function () {

                //创建p、设置css样式、追加给body

                var tu = document.createElement('p');

 

                tu.style.width = w + "px";

                tu.style.height = h + "px";

                tu.style.backgroundImage = "url(./12.jpg)";

 

                document.body.appendChild(tu);

            }

        }

 

        //② 绘制食物

        function Food() {

            var len = 20;

            //把食物(权值)坐标声明为公开的,以便在外部访问

            this.xFood = 0;

            this.yFood = 0;

            this.piece = null; //页面上唯一的食物对象

            //绘制

            this.showfood = function () {

                //创建p、设置css样式、追加给body

                if (this.piece === null) {

                    this.piece = document.createElement('p');

                    this.piece.style.width = this.piece.style.height = len + "px";

                    this.piece.style.backgroundColor = "green";

                    this.piece.style.position = "absolute";

 

                    document.body.appendChild(this.piece);

                }

                //食物设置绝对定位(position/left/top)

                //食物位置“随机”摆放

                //移动步进值:20px

                //食物“权值”坐标: X轴(0-39)  Y轴(0-19) 

                //食物真实坐标:权值坐标 *  步进值

                this.xFood = Math.floor(Math.random() * 40);  //0-39的随机数

                this.yFood = Math.floor(Math.random() * 20);  //0-19的随机数

 

                this.piece.style.left = this.xFood * len + "px";

                this.piece.style.top = this.yFood * len + "px";

 

            }

        }

 

        //③ 小蛇

        function Snake() {

            var len = 20;

            this.redirect = "right"; //默认向右边移动

            //后期snakebody要变化,因此声明为公开的(每个蛇节:[x坐标,y坐标,颜色,蛇节对象])

            this.snakebody = [[0, 1, 'green', null], [1, 1, 'green', null], [2, 1, 'green', null], [3, 1, 'red', null]];

            //a.绘制小蛇

            this.showsnake = function () {

                //遍历小蛇的各个蛇节,并依次创建即可

                for (var i = 0; i < this.snakebody.length; i++) {

                    //this.snakebody[i]//代表每个蛇节

                    //创建蛇节p

                    if (this.snakebody[i][3] === null) {//判断没有创建对应的蛇节

                        this.snakebody[i][3] = document.createElement('p');

                        //设置css样式(宽度、高度、颜色)

                        this.snakebody[i][3].style.width = this.snakebody[i][3].style.height = len + "px";

                        this.snakebody[i][3].style.backgroundColor = this.snakebody[i][2];

                        //绝对定位及位置

                        this.snakebody[i][3].style.position = "absolute";

                        //把蛇节追加给body

                        document.body.appendChild(this.snakebody[i][3]);

                    }

                    this.snakebody[i][3].style.left = this.snakebody[i][0] * len + "px";

                    this.snakebody[i][3].style.top = this.snakebody[i][1] * len + "px";

                }

            }

 

            //b.移动小蛇

            this.movesnake = function () {

                //非蛇头蛇节(当前蛇节的新坐标 是"下个蛇节"的旧坐标)

                for (var i = 0; i < this.snakebody.length - 1; i++) {

                    this.snakebody[i][0] = this.snakebody[i + 1][0];

                    this.snakebody[i][1] = this.snakebody[i + 1][1];

                }

                if (this.redirect == "right") {

                    //蛇头x坐标递增

                    this.snakebody[this.snakebody.length - 1][0] += 1;

                }

                if (this.redirect == "left") {

                    //蛇头x坐标递减

                    this.snakebody[this.snakebody.length - 1][0] -= 1;

                }

                if (this.redirect == "up") {

                    //蛇头y坐标递减

                    this.snakebody[this.snakebody.length - 1][1] -= 1;

                }

                if (this.redirect == "down") {

                    //蛇头y坐标递增

                    this.snakebody[this.snakebody.length - 1][1] += 1;

                }

 

                //判断蛇头碰到食物

                //蛇头坐标

                var xSnake = this.snakebody[this.snakebody.length - 1][0];

                var ySnake = this.snakebody[this.snakebody.length - 1][1];

                //食物坐标food.xFood/food.yFood;

                if (xSnake == food.xFood && ySnake == food.yFood) {

                    //吃食物增加蛇节

                    var newjie = [this.snakebody[0][0], this.snakebody[0][1], 'green', null];

                    this.snakebody.unshift(newjie);//把newjie放到数组的第一个位置去

 

                    //原食物消失,重新生成一个食物

                    food.showfood();

                }

 

                //控制小蛇在地图范围内移动

                if (xSnake < 0 || xSnake > 39 || ySnake < 0 || ySnake > 19) {

                    alert('game over');

                    clearInterval(mytime);

                    return false;

                }

                //吃到自己判断(蛇头坐标与其他蛇节坐标一致)

                for (var k = 0; k < this.snakebody.length - 1; k++) {

                    if (this.snakebody[k][0] == xSnake && this.snakebody[k][1] == ySnake) {

                        alert('game over kill you by yourself');

                        clearInterval(mytime);

                        return false;

                    }

                }

 

                //根据新坐标绘制小蛇

                this.showsnake();

            }

        }

 

        window.onload = function () {

            var map = new Map();

            map.showmap();

 

            food = new Food();//声明为全局的以便在该加载事件函数外部访问

            food.showfood();

 

            snake = new Snake();//声明为全局的snake对象

            snake.showsnake();

 

            //移动小蛇

            //setInterval(全局变量,时间)

            mytime = setInterval("snake.movesnake()", 200);

 

            //设置键盘事件,控制器小蛇移动方向

            document.onkeydown = function (evt) {

                var num = evt.keyCode;//通过事件对象获得数值码,进而知道被触发键子

                if (num == 38) {

                    snake.redirect = "up";

                }

                if (num == 40) {

                    snake.redirect = "down";

                }

                if (num == 37) {

                    snake.redirect = "left";

                }

                if (num == 39) {

                    snake.redirect = "right";

                }

            }

        }

    </script>

 

    <style type="text/css">

        body {

            margin: 0;

        }

    </style>

</head>

<body></body>

</html>

本文展示了JS实现简易版贪吃蛇小游戏的相关代码,更多相关内容请关注喷绘php中文网。
相关推荐:

简易 PHP+MySQL 分页类

HTML转Excel,并实现打印,下载功能

两个不用递归的树形数组构造函数

以上就是JS实现简易版贪吃蛇小游戏的详细内容

 0  已被阅读了813次  楼主 2020-06-22 19:24:13
回复列表

回复:JS实现简易版贪吃蛇小游戏

联系站长 友链申请桂ICP备19000949号-1     桂ICP备19000949号-1
您的IP:3.145.167.176,2024-05-16 20:35:14,Processed in 0.04059 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.12.9
已有0次打赏
(0) 分享
分享
取消
免责声明
1、本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !
如果觉得本文还不错请点个赞或者打赏点轻币哦~
拒绝伸手党,拿走请回复,尊重楼主,尊重你我他~

侵权删除请致信 E-Mail:207882320@qq.com