您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在github上玩贪吃蛇
- // ==UserScript==
- // @name github snake
- // @author wusuluren
- // @description 在github上玩贪吃蛇
- // @require http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js
- // @match *://github.com/*
- // @supportURL https://github.com/Wusuluren
- // @version 0.0.1
- // @grant None
- // @namespace https://greasyfork.org/users/194747
- // ==/UserScript==
- (function () {
- 'use strict';
- class Position {
- constructor(x, y) {
- this.x = x
- this.y = y
- }
- }
- class SnakeNode extends Position {
- constructor(x, y, prev, next) {
- super(x, y)
- this.prev = prev
- this.next = next
- }
- }
- const CLEAR_COLOR = 0
- const SNAKE_COLOR = 2
- const FOOD_COLOR = 4
- var color_table = new Array()
- var snake_head, snake_tail
- var food
- var Screen_Width, Screen_Height
- var map
- $(function(){
- get_color_table()
- full(0)
- init()
- var timer = setInterval(function() {
- if (!move_snake()) {
- clearInterval(timer)
- full(0)
- return
- }
- }, 1000)
- })
- function get_color_table () {
- var lis = $('.legend').children()
- for (var i = 0; i < lis.length; i++) {
- color_table[i] = lis[i].style.backgroundColor
- }
- }
- function draw_point(x, y, depth) {
- var gs = document.getElementsByTagName('g')
- if (x < gs.length) {
- var days = gs[x].getElementsByClassName('day')
- if (y < days.length) {
- days[y].setAttribute('fill', color_table[depth])
- }
- }
- }
- function draw_position(pos, depth) {
- var gs = document.getElementsByTagName('g')
- if (pos.x < gs.length) {
- var days = gs[pos.x].getElementsByClassName('day')
- if (pos.y < days.length) {
- days[pos.y].setAttribute('fill', color_table[depth])
- }
- }
- }
- function full (depth) {
- var gs = document.getElementsByTagName('g')
- if (gs === undefined)
- return false
- for (var x = 1; x < gs.length; x++) {
- for (var y = 0; y < 7; y++)
- draw_point(x, y, depth)
- }
- return true
- }
- function new_position() {
- while(1) {
- var x = Math.floor(Math.random() * Screen_Width)
- var y = Math.floor(Math.random() * Screen_Height)
- if (map[y][x] === undefined || map[y][x] == 0)
- break
- }
- return new Position(x, y)
- }
- function same_position(a, b) {
- return a.x == b.x && a.y == b.y
- }
- function init() {
- var gs = document.getElementsByTagName('g')
- Screen_Width = gs.length
- Screen_Height = 7
- map = new Array()
- for (var y = 0; y < Screen_Height; y++) {
- map[y] = new Array()
- for (var x = 0; x < Screen_Width; x++)
- map[y][x] = 0
- }
- var pos = new_position()
- snake_head = new SnakeNode(pos.x, pos.y, undefined, undefined)
- snake_tail = snake_head
- draw_position(snake_head, SNAKE_COLOR)
- map[pos.y][pos.x] = 1
- food = new_position()
- draw_position(food, FOOD_COLOR)
- }
- function in_screen(x, y) {
- return (x >= 0 && x < Screen_Width) && (y >= 0 && y < Screen_Height)
- }
- function get_safe_x(x) {
- if (x < 0)
- return Screen_Width - 1
- if (x >= Screen_Width)
- return 0
- return x
- }
- function get_safe_y(y) {
- if (y < 0)
- return Screen_Height - 1
- if (y >= Screen_Height)
- return 0
- return y
- }
- function get_next_step() {
- var gap_x = [0, -1, 0, 1]
- var gap_y = [-1, 0, 1, 0]
- var min_score = Infinity
- var min_idx = 0
- for (var i = 0; i < 4; i++) {
- var x = get_safe_x(snake_head.x + gap_x[i])
- var y = get_safe_y(snake_head.y + gap_y[i])
- if (map[y][x] == 0) {
- var score = Math.abs(food.x - x) + Math.abs(food.y - y)
- if (score < min_score) {
- min_score = score
- min_idx = i
- }
- }
- }
- return new Position(get_safe_x(snake_head.x + gap_x[min_idx]), get_safe_y(snake_head.y + gap_y[min_idx]))
- }
- function move_snake() {
- var next_step = get_next_step()
- if (!judge_game(next_step)) {
- return false
- }
- var new_head = new SnakeNode(next_step.x, next_step.y, undefined, snake_head)
- snake_head.prev = new_head
- snake_head = new_head
- var discard_node = snake_tail
- snake_tail = snake_tail.prev
- snake_tail.next = undefined
- map[snake_head.y][snake_head.x] = 1
- map[discard_node.y][discard_node.x] = 0
- draw_position(discard_node, CLEAR_COLOR)
- draw_position(snake_head, SNAKE_COLOR)
- return true
- }
- function judge_game(next_step) {
- if (same_position(next_step, food)) {
- var pos = new_position()
- var node = new SnakeNode(pos.x, pos.y, snake_tail, undefined)
- snake_tail.next = node
- snake_tail = node
- map[snake_tail.y][snake_tail.x] = 1
- food = new_position()
- draw_position(food, FOOD_COLOR)
- return true
- }
- if (map[next_step.y][next_step.x] == 1) {
- return false
- }
- return true
- }
- })();