├── .github └── workflows │ └── main.yml ├── Hi.md ├── LICENSE ├── README.md ├── audio.mp3 ├── canvas-controller.js ├── data.json ├── data2.json ├── fix-audio.md ├── game.html ├── html-controller.js ├── index.html ├── lb-short.html ├── leaderboard-controller-short.js ├── leaderboard-controller.js ├── leaderboard.html ├── loading.gif └── styles.css /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Issue data pusher 4 | 5 | # Controls when the workflow will run 6 | # Triggers the workflow when issue is opened 7 | on: 8 | issues: 9 | types: [opened] 10 | 11 | # Allows you to run this workflow manually from the Actions tab 12 | workflow_dispatch: 13 | 14 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 15 | jobs: 16 | 17 | build: 18 | # The type of runner that the job will run on 19 | runs-on: ubuntu-latest 20 | 21 | steps: 22 | 23 | - uses: actions/checkout@v2 24 | with: 25 | submodules: 'recursive' 26 | - name: remove changes 27 | run: git reset -- data.json 28 | - name: remove data changes 29 | run: git reset --hard 30 | 31 | - name: pull 32 | run: git pull 33 | continue-on-error: true 34 | 35 | - if: startsWith(github.event.issue.title, '&=') == true 36 | name: Update name in data.json 37 | run: echo "`jq '.data[0].name |= . + "${{ github.event.issue.title }}"' data2.json`" > data2.json 38 | - if: startsWith(github.event.issue.title, '&=') == true 39 | name: Update scores in data.json 40 | run: echo "`jq '.data[1].scores |= . + "${{ github.event.issue.body }}"' data2.json`" > data2.json 41 | 42 | - if: startsWith(github.event.issue.title, '&=') == true 43 | name: Commit 44 | uses: EndBug/add-and-commit@v9 45 | id: commit 46 | with: 47 | message: 'updating database' 48 | add: "data2.json --force" 49 | pathspec_error_handling: ignore 50 | push: true 51 | continue-on-error: true 52 | 53 | 54 | - if: startsWith(github.event.issue.title, '&=') == true 55 | name: Close Issue 56 | uses: peter-evans/close-issue@v2 57 | with: 58 | comment: | 59 | Issue data processed. Closing issue... 60 | 61 | - name: remove changes 62 | run: git reset -- data.json 63 | - name: remove data changes 64 | run: git reset --hard 65 | -------------------------------------------------------------------------------- /Hi.md: -------------------------------------------------------------------------------- 1 | # snake 2 | Snake game by AninditP and Skparab1 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Snake 2 | A serverless, graphics-based game of snake with a leaderboard by Skparab1, AninditP, AdvaitaG, Apawate, and Anish-lakkapragada playable at https://skparab1.github.io/snakeg 3 | 4 | ## Top features 5 | - Color high quality graphics display and animations 6 | Screen Shot 2022-05-22 at 6 44 48 PM 7 | 8 | - Seamless integration of Canvas and HTML elements 9 | Screen Shot 2022-05-22 at 6 48 08 PM 10 | 11 | - Auto resizing canvas - full height game with any display size 12 | ![ezgif com-gif-maker(31)](https://user-images.githubusercontent.com/71990977/169729074-acca5788-f2fb-42a5-bc32-9a0c54a268db.gif) 13 | 14 | - Live ranked leaderboard 15 | Screen Shot 2022-05-22 at 7 00 22 PM 16 | 17 | - Autopilot mode 18 | 19 | ![ezgif com-gif-maker(32)](https://user-images.githubusercontent.com/71990977/169730179-08b9f20f-6f48-45e9-b2a8-860a8f5e7ed5.gif) 20 | 21 | - Dark and light modes 22 | 23 | ![ezgif com-gif-maker(33)](https://user-images.githubusercontent.com/71990977/169731168-da64d333-b414-4a40-9242-a5b0c0b92121.gif) 24 | 25 | - Insanely good music by @advaitaG 26 | 27 | ## Small features 28 | - Best score tracker 29 | - Timer 30 | - On screen arrow key controls 31 | - Error notif when unable to play audio, and ways to fix it 32 | 33 | ## Contributers 34 | - Developers: Shubham Parab, Anindit Pati, Agastya Pawate 35 | - Designers: Anindit Pati and Shubham Parab 36 | - Music: Advaita Guruprasad 37 | 38 | ## Software 39 | - Actual game website in HTML Canvas and JavaScript 40 | - Leaderboard database with Js and Yaml (github actions) 41 | -------------------------------------------------------------------------------- /audio.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Skparab1/snake/9693eaeb56c8bdc5753da82366e8bb2d1532b433/audio.mp3 -------------------------------------------------------------------------------- /canvas-controller.js: -------------------------------------------------------------------------------- 1 | 2 | // this is just to force resiez 3 | //window.reload(); 4 | // act nvm 5 | var audioElement = new Audio('audio.mp3'); 6 | audioElement.addEventListener("canplaythrough", event => { 7 | /* the audio is now playable; play it if permissions allow */ 8 | audioElement.play(); 9 | var playable; 10 | if (audioElement.duration > 0 && !audioElement.paused){ 11 | //console.log('playing'); 12 | playable = true; 13 | } else { 14 | playable = false; 15 | //console.log('not playing'); 16 | //alert('Unable to play audio'); 17 | if (!playable){ 18 | let notif = document.getElementById('notif'); 19 | notif.style.display = "block"; 20 | notif.innerHTML = '

Unable to play Audio. Check audio permissions and try again. See how to allow audio here

'; 21 | } 22 | } 23 | }); 24 | audioElement.controls = true; 25 | audioElement.loop = true; 26 | let volume = document.querySelector("#volume-control"); 27 | volume.addEventListener("change", function(e) { 28 | audioElement.volume = e.currentTarget.value/100; 29 | }) 30 | 31 | // alr anindit here are the toggle constants 32 | const boardSize = 20; //so 20 means 20x20 and 40 would be 40x40 and you can change it to anything you want 33 | const speedfactor = 189; //directly porportional to these many pixels per second (but not exactly) 34 | const pixelbackground1 = 'rgb(0,150,0)'; // this is like the pixel background pattern 35 | const pixelbackground2 = 'rgb(0,190,0)'; // its in rgb but you can make it hex or hsv if u want 36 | // emphasis background colors 37 | const pixelbackground1EMP = 'rgb(0,120,0)'; 38 | const pixelbackground2EMP = 'rgb(0,160,0)'; 39 | var bordercolor = 'rgb(0,100,0)'; //bordercolor 40 | const snakecolor1 = 'rgb(0,0,100)'; //snakecolor1 41 | const snakecolor2 = 'rgb(0,0,255)'; //snakecolor2 42 | const snakeheadcolor = 'rgb(200,100,0)'; //apple color 43 | // arrays for the same things above for logistical things 44 | var snakecolor1ARR = [0,100,0]; //snakecolor1 45 | var snakecolor2ARR = [0,0,255]; //snakecolor2 46 | var snakeheadcolorARR = [200,100,0];; //apple color 47 | var eyesize = 2 // squarelength/this pixels 48 | const applecolor = 'rgb(150,0,0)'; //apple color 49 | const seglength = 75; //snake segment length in pixels 50 | const addlength = 30; //increase snake length by these many pixels when it eats an apple 51 | const borderleniance = 0.5 // the game will ignore a wall hit as long as it is less than 0.5 boxes away from the border 52 | const rendertime = 10 // render every 10 snake circles 53 | const endcurtainspeed = 0.25 // seconds wait in between frames of each pixel expansion (for game over animation) 54 | var autopilot = false; // this is for fun but it turns on with the localstorage reader 55 | var lost = false; 56 | var theme = "black"; 57 | var best = localStorage.getItem("best"); 58 | var lastfps = Date.now(); 59 | var avgfps = 0; 60 | var fpslst = []; 61 | var snakeclr4 = "1aP"; 62 | var censored = "tawt;erohw a fo nos;hctib a fo nos;tuls;rekcufretsis;ssa tihs;tihs;kcirp;ssip;aggin;rekcufrehtom;tihs ni;tihsesroh;tihs yloh;lleh;nmadsdog;nmaddog;kcuf;reggirf;rekcufrehtaf;gniffe;nmad;tnuc;parc;rekcuskcoc;kcoc;rekcuf-dlihc;tihsllub;reggub;rekcufrehtorb;skcollob;hctib;dratsab;elohssa;ssa;esra"; 63 | censored = censored.split("").reverse().join("").split(";"); 64 | //console.log(censored); 65 | 66 | if (localStorage.getItem("best") == null){ 67 | localStorage.setItem("best",0); 68 | best = 0; 69 | } 70 | 71 | //console.log('best',best); 72 | 73 | if (localStorage.getItem('autopilot') == "true"){ 74 | autopilot = true; 75 | bordercolor = "rgb(100,0,0)"; 76 | } 77 | 78 | if (localStorage.getItem('autopilot') == null){ 79 | autopilot = false; 80 | localStorage.setItem('autopilot',"false"); 81 | } 82 | 83 | if (window.location.href.includes('?autopilot=true')){ // this is an override in case anyone still uses it 84 | autopilot = true; 85 | bordercolor = "rgb(100,0,0)"; 86 | } 87 | 88 | // dont do anythign below this 89 | const turningPrecision = true; 90 | snakeclr4 += "EJSX"; 91 | 92 | function drawline(x,y,x1,y1,clr){ 93 | ctx.beginPath(); 94 | ctx.lineWidth = 3; 95 | ctx.strokeStyle = clr; 96 | ctx.moveTo(x,y); 97 | ctx.lineTo(x1,y1) 98 | ctx.stroke(); 99 | } 100 | 101 | function drawboard(){ 102 | ctx.beginPath(); 103 | let x = 0; 104 | let actx = window.innerWidth/4; 105 | let clrnow = pixelbackground1; 106 | while (x < boardSize+2){ 107 | let y = 0; 108 | let acty = 0; 109 | while (y < boardSize+4){ 110 | if (clrnow == pixelbackground1){ 111 | clrnow = pixelbackground2; 112 | } else { 113 | clrnow = pixelbackground1; 114 | } 115 | ctx.fillStyle = clrnow; 116 | if (x == 0 || x == boardSize+1 || y == 0 || y == boardSize+1){ 117 | let reserve = clrnow; 118 | ctx.fillStyle = bordercolor; 119 | ctx.fillRect(actx, acty, height/(boardSize+2), height/(boardSize+2)); 120 | clrnow = reserve; 121 | } else { 122 | ctx.fillRect(actx, acty, height/(boardSize+2), height/(boardSize+2)); 123 | } 124 | acty += (height)/(boardSize+2); 125 | y += 1; 126 | //console.log('drew smth'); 127 | } 128 | 129 | if (clrnow == pixelbackground1){ 130 | clrnow = pixelbackground2; 131 | } else { 132 | clrnow = pixelbackground1; 133 | } 134 | actx += (height)/(boardSize+2); 135 | x += 1; 136 | } 137 | let leniance = ((height)/(boardSize+2))*borderleniance; 138 | bounderies = [window.innerWidth/4+(height)/(boardSize+2)*1.5-leniance,(height)/(boardSize+2)*1.5-leniance,(window.innerWidth/4+height*((boardSize-1)/boardSize))-(height)/(boardSize+2)/2.5+leniance,height*(boardSize-1)/boardSize-(height)/(boardSize+2)/2+leniance]; 139 | } 140 | 141 | function openintro(){ 142 | closedintro = false; 143 | //console.log('opened it'); 144 | let credits = document.getElementById('credits'); 145 | credits.style.display= "none"; 146 | let intro = document.getElementById('introducer'); 147 | let intro1 = document.getElementById('introducer-cover'); 148 | 149 | intro.style.display = "block"; 150 | intro1.style.display = "block"; 151 | 152 | // let starter = document.querySelector('.starter'); 153 | // starter.addEventListener('click', closeintro()); 154 | 155 | intropc = 0; 156 | (async () => { 157 | while (intropc <= 50){ 158 | //console.log('in'); 159 | intro1.style.opacity = intropc+'%'; 160 | intro.style.opacity = intropc*2+'%'; 161 | await sleep(2); 162 | intropc += 1; 163 | } 164 | })(); 165 | intro.style.display = "block"; 166 | //intro1.style.display = "block"; 167 | } 168 | 169 | function opencredits(){ 170 | console.log('opened credits'); 171 | closedintro = false; 172 | let intro = document.getElementById('credits'); 173 | let intro1 = document.getElementById('introducer-cover'); 174 | 175 | intro.style.display = "block"; 176 | intro1.style.display = "block"; 177 | 178 | // let starter = document.querySelector('.starter'); 179 | // starter.addEventListener('click', closeintro()); 180 | 181 | intropc = 0; 182 | (async () => { 183 | while (intropc <= 50){ 184 | console.log('in'); 185 | intro1.style.opacity = intropc+'%'; 186 | intro.style.opacity = intropc*2+'%'; 187 | await sleep(2); 188 | intropc += 1; 189 | } 190 | })(); 191 | intro.style.display = "block"; 192 | //intro1.style.display = "block"; 193 | } 194 | 195 | function opensnake(){ 196 | startwaiter = true; 197 | xd = speed; 198 | closedintro = false; 199 | let intro = document.getElementById('snakestyle'); 200 | let intro1 = document.getElementById('introducer-cover'); 201 | 202 | intro.style.display = "block"; 203 | //intro1.style.display = "block"; 204 | 205 | // let starter = document.querySelector('.starter'); 206 | // starter.addEventListener('click', closeintro()); 207 | 208 | intropc = 0; 209 | (async () => { 210 | while (intropc <= 50){ 211 | console.log('in'); 212 | //intro1.style.opacity = intropc+'%'; 213 | intro.style.opacity = intropc*2+'%'; 214 | await sleep(2); 215 | intropc += 1; 216 | } 217 | })(); 218 | intro.style.display = "block"; 219 | //intro1.style.display = "block"; 220 | } 221 | 222 | function animateboard(){ 223 | ctx.beginPath(); 224 | (async () => { 225 | let anim = 0; 226 | while (anim < 101){ 227 | let x = 0; 228 | let actx = window.innerWidth/4; 229 | let clrnow = pixelbackground1EMP; 230 | 231 | while (x < boardSize+2){ 232 | let y = 0; 233 | let acty = 0; 234 | while (y < boardSize+4){ 235 | 236 | if (clrnow == pixelbackground1EMP){ 237 | clrnow = pixelbackground2EMP; 238 | } else { 239 | clrnow = pixelbackground1EMP; 240 | } 241 | 242 | //console.log(anim,'wut'); 243 | ctx.fillStyle = clrnow; 244 | if (x == 0 || x == boardSize+1 || y == 0 || y == boardSize+1){ 245 | if (clrnow == pixelbackground1EMP){ 246 | clrnow = pixelbackground2EMP; 247 | } else { 248 | clrnow = pixelbackground1EMP; 249 | } 250 | let reserve = clrnow; 251 | ctx.fillStyle = bordercolor; 252 | ctx.fillRect(actx, acty, (height/(boardSize+2))*anim/100, (height/(boardSize+2))*anim/100); 253 | clrnow = reserve; 254 | //console.log(anim,'in first'); 255 | } else { 256 | //clrnow = 'rgb(0,0,0)'; 257 | ctx.fillStyle = clrnow; 258 | ctx.fillRect(actx, acty, (height/(boardSize+2)), (height/(boardSize+2))*anim/100); 259 | //console.log(anim,'in'); 260 | } 261 | acty += (height)/(boardSize+2); 262 | y += 1; 263 | //console.log('drew smth'); 264 | } 265 | 266 | if (clrnow == pixelbackground1EMP){ 267 | clrnow = pixelbackground2EMP; 268 | } else { 269 | clrnow = pixelbackground1EMP; 270 | } 271 | actx += (height)/(boardSize+2); 272 | x += 1; 273 | } 274 | //console.log(anim,'in but out'); 275 | await sleep(2); 276 | anim += 2; 277 | } 278 | })(); 279 | } 280 | 281 | function drawcircle(x,y,rad,circlr){ 282 | ctx.beginPath(); 283 | ctx.fillStyle = circlr; 284 | ctx.arc(x, y, rad, 0, 2 * Math.PI); //-((height)/(boardSize+2)/2) 285 | ctx.fill(); 286 | } 287 | 288 | 289 | function cir(x,y,rad,circlr,start,end){ 290 | ctx.beginPath(); 291 | ctx.fillStyle = circlr; 292 | ctx.arc(x, y, rad, start * Math.PI, end * Math.PI); //-((height)/(boardSize+2)/2) 293 | ctx.fill(); 294 | } 295 | 296 | function drawapple(x,y,rad){ 297 | ctx.beginPath(); 298 | ctx.fillStyle = applecolor; 299 | ctx.arc(x, y, rad, 0, 2 * Math.PI); //-((height)/(boardSize+2)/2) 300 | ctx.fill(); 301 | ctx.beginPath(); 302 | ctx.fillStyle = 'rgb(0,255,0)'; 303 | ctx.arc(x, y-rad/2, rad/4, 0, 2 * Math.PI); 304 | ctx.fill(); 305 | } 306 | 307 | function closeintro(){ 308 | console.log('closed it'); 309 | closedintro = true; 310 | (async () => { 311 | let intro = document.getElementById('introducer'); 312 | let namer = document.getElementById('name'); 313 | namer = namer.value; 314 | localStorage.setItem("name", namer); 315 | let intro1 = document.getElementById('introducer-cover'); 316 | // intro1.style.display = "none"; 317 | // intro.style.display = "none"; 318 | let intropc1 = 50; 319 | while (intropc1 >= 0){ 320 | //console.log('was '+intropc1); 321 | intro1.style.opacity = intropc1+'%'; 322 | intro.style.opacity = intropc1+'%'; 323 | await sleep(2); 324 | intropc1 -= 1; 325 | } 326 | intro1.style.display = "none"; 327 | intro.style.display = "none"; 328 | censorer = 0; 329 | //console.log('checked'); 330 | let namehandler = document.getElementById('name'); 331 | let namedisp = document.getElementById('namedisplay'); 332 | //(censored,namehandler.value); 333 | while (censorer < censored.length){ 334 | if (namehandler.value.toLowerCase().includes(censored[censorer].toLowerCase())){ 335 | namedisp.innerHTML = "Name: Censored"; 336 | console.log(namedisp.textContent); 337 | name = "Censored"; 338 | console.log(censored[censorer],namehandler.value); 339 | localStorage.setItem('name',"Censored"); 340 | } 341 | censorer += 1; 342 | } 343 | })(); 344 | } 345 | 346 | function closecredits(){ 347 | closedintro = true; 348 | (async () => { 349 | let intro = document.getElementById('credits'); 350 | let intro1 = document.getElementById('introducer-cover'); 351 | // intro1.style.display = "none"; 352 | // intro.style.display = "none"; 353 | let intropc1 = 50; 354 | while (intropc1 >= 0){ 355 | //console.log('was '+intropc1); 356 | intro1.style.opacity = intropc1+'%'; 357 | intro.style.opacity = intropc1+'%'; 358 | await sleep(2); 359 | intropc1 -= 1; 360 | } 361 | intro1.style.display = "none"; 362 | intro.style.display = "none"; 363 | })(); 364 | } 365 | 366 | function closesnake(){ 367 | closedintro = true; 368 | (async () => { 369 | let intro = document.getElementById('snakestyle'); 370 | let intro1 = document.getElementById('introducer-cover'); 371 | // intro1.style.display = "none"; 372 | // intro.style.display = "none"; 373 | let intropc1 = 50; 374 | while (intropc1 >= 0){ 375 | //console.log('was '+intropc1); 376 | intro1.style.opacity = intropc1+'%'; 377 | intro.style.opacity = intropc1+'%'; 378 | await sleep(2); 379 | intropc1 -= 1; 380 | } 381 | intro1.style.display = "none"; 382 | intro.style.display = "none"; 383 | })(); 384 | } 385 | 386 | const canvas = document.querySelector('.myCanvas'); 387 | const ctx = canvas.getContext('2d'); 388 | const width = canvas.width = window.innerWidth/2+window.innerWidth/4; 389 | const height = canvas.height = window.innerHeight-100; 390 | var bounderies = [0,0,0,0]; 391 | var score = 0; 392 | var snakeclr = "g"; 393 | var snakeclr3 = "g"; 394 | snakeclr4 += "flEM"; 395 | canvas.style.left = "100px"; 396 | canvas.style.top = "100px"; 397 | 398 | //canvas outline 399 | //ctx.strokeStyle = 'rgb(125,125,125)'; 400 | ctx.fillStyle = theme; 401 | ctx.fillRect(0, 0, width, height); 402 | //console.log('printeddd'); 403 | 404 | drawboard(); 405 | 406 | var speed = ((height)/(boardSize+2))/(200-speedfactor); // 1/4 square/frame? 407 | var basespeed = speed; 408 | let xpos = window.innerWidth/4+(height)/(boardSize+2)*1.5+(height)/(boardSize+2)*2; 409 | let ypos = ((height)/(boardSize+2)*1.5)+(height)/(boardSize+2)*(boardSize/2); 410 | let startingpos = [xpos,ypos]; 411 | var pointsArr = [xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,xpos,ypos,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; 412 | var xd = 0; 413 | var yd = 0 414 | snakeclr += "h"; 415 | snakeclr4 += "gl4Vl7j"; 416 | var waiter = ''; 417 | var waiter2 = ''; 418 | var waiter3 = ''; 419 | var startwaiter = false; 420 | var applepos = [Math.floor(Math.random()*(boardSize-2))*(height)/(boardSize+2)+window.innerWidth/4+(height)/(boardSize+2)*1.5+(height)/(boardSize+2), Math.floor(Math.random()*(boardSize-2))*(height)/(boardSize+2)+(height)/(boardSize+2)+((height)/(boardSize+2)*1.5)]; 421 | var scalefactor = window.innerWidth/2048; 422 | var initxpos = xpos; 423 | var initypos = ypos; 424 | var breaker = false; 425 | snakeclr += "p"; 426 | var snakeclr2 = ""; 427 | var eatwaiter = 0; 428 | var lastapple = [0,0]; 429 | var elapsedtime = 0; 430 | var door = 0.01; 431 | var byte = 2*((height)/(boardSize*2.2)); 432 | var start = Date.now(); 433 | var intropc = 0; 434 | snakeclr += "_"; 435 | var snakeclr5= snakeclr; 436 | snakeclr4 += "vIuxZ1i"; 437 | var closedintro = true; 438 | var firsttime; 439 | var starting = true; 440 | 441 | let reader = localStorage.getItem('firsttime'); 442 | if (reader == null){ 443 | localStorage.setItem('firsttime','false'); 444 | firsttime = true; 445 | closedintro = false; 446 | } 447 | 448 | //console.log(applepos); 449 | snakeclr += "F6E6F"; 450 | speed = speed;//*(scalefactor); 451 | snakeclr += "l2Ga5"; 452 | snakeclr3 = snakeclr+"CId6qmQbI3IENO"; 453 | snakeclr4 += "XTRmm0z"; 454 | 455 | const sleep = ms => new Promise(res => setTimeout(res, ms)); 456 | 457 | (async () => { 458 | let counter = 0; 459 | while ((xpos >= bounderies[0] && xpos <= bounderies[2] && ypos >= bounderies[1] && ypos <= bounderies[3])){ // took out waiters || waiter != '' || waiter2 != '' 460 | ctx.clearRect(0, 0, canvas.width, canvas.height); 461 | speed = speed * 1.00001; 462 | 463 | if (counter % 100 == 0 || true){ 464 | // check fps 465 | let renderellapse = (Date.now() - lastfps); 466 | if (renderellapse < 0.5){ 467 | renderellapse = 6.5; 468 | } 469 | fpslst.push(renderellapse); 470 | //avgfps = (avgfps+renderellapse)/2; 471 | let sum = fpslst.reduce((a, b) => a + b, 0); 472 | let avgfps = (sum / fpslst.length) || 0; 473 | //console.log('avg'+fpslst); 474 | lastfps = Date.now(); 475 | 476 | // actually fps is not actual fps but delay between frames 477 | 478 | //console.log('acutal fps '+1/avgfps); 479 | 480 | // so basically adjust speed based on deviation from 6.5 ever 100 frames 481 | //avgfps = time between frames 482 | // so basically fps = 6.5 milisec between frames 483 | // lps = loops per sec 484 | let lps = 1000/avgfps; 485 | 486 | let deviation = 153/lps; // more loops per sec, lesser 487 | //console.log('delay in between frames is'+avgfps); 488 | //console.log('deviation from 153 lps is '+deviation); 489 | //bascially deviation is higher if delay is higher 490 | 491 | // adjustment 492 | let newspeed = basespeed*((deviation-1)*0.9+1); 493 | if (newspeed > speed){ 494 | speed = speed*1.01; 495 | } else if (newspeed < speed){ 496 | speed = speed*0.99; 497 | } 498 | } 499 | 500 | if (autopilot && counter >= 1){ 501 | let btn = document.getElementById('playbtn7'); 502 | btn.innerHTML = "Disable autopilot"; 503 | let apnotif = document.getElementById('ap notif'); 504 | apnotif.textContent = "Autopilot: On"; 505 | } 506 | 507 | if (counter >= 1100){ 508 | let notif1 = document.getElementById('notif'); 509 | notif1.style.display = "none"; 510 | } 511 | 512 | if (counter >= 1 && startwaiter){ 513 | if (starting){ 514 | start = Date.now(); 515 | starting = false; 516 | } 517 | document.getElementById('time').innerHTML = 'Time: '+(Date.now() - start)/1000 +" sec"; 518 | elapsedtime = (Date.now() - start)/1000; 519 | } 520 | 521 | if (counter == 1){ 522 | let leftpanel = document.getElementById('leftpanel'); 523 | leftpanel.style.width = width/3; 524 | } 525 | 526 | if (counter >= 1){ 527 | 528 | let rightdisplay = document.getElementById("all"); 529 | rightdisplay.style.display = "block"; 530 | 531 | let intro = document.getElementById('introducer'); 532 | intro.style.left = window.innerWidth/4 +'px'; 533 | intro.style.width = window.innerWidth/2 +'px'; 534 | intro.style.top = window.innerHeight/7 +'px'; 535 | intro.style.height = 5*window.innerHeight/7 +'px'; 536 | 537 | intro = document.getElementById('credits'); 538 | intro.style.left = window.innerWidth/4 +'px'; 539 | intro.style.width = window.innerWidth/2 +'px'; 540 | intro.style.top = window.innerHeight/4 +'px'; 541 | intro.style.height = window.innerHeight/2 +'px'; 542 | 543 | intro = document.getElementById('snakestyle'); 544 | intro.style.left = bounderies[2]+2*byte +'px'; 545 | intro.style.width = (window.innerWidth - bounderies[2] - 3*byte) +'px'; 546 | intro.style.top = window.innerHeight/7 +'px'; 547 | intro.style.height = 5*window.innerHeight/7 +'px'; 548 | 549 | 550 | let intro1 = document.getElementById('introducer-cover'); 551 | intro1.style.left = '0px'; 552 | intro1.style.width = window.innerWidth +'px'; 553 | intro1.style.top = '0px'; 554 | intro1.style.height = window.innerHeight +'px'; 555 | 556 | btn = document.getElementById('best'); 557 | btn.innerHTML = "Best: "+best; 558 | 559 | if (!firsttime && counter == 1){ 560 | intro.style.display = "none"; 561 | intro1.style.display = "none"; 562 | } 563 | 564 | let namehandler = document.getElementById('name'); 565 | let namedisp = document.getElementById('namedisplay'); 566 | //console.log('VALLL '+namehandler.value+' next'+namedisp.textcontent); 567 | namedisp.innerHTML = "Name: "+namehandler.value; 568 | name = namehandler.value; 569 | let censorer = 0; 570 | if (namehandler.value == ''){ 571 | namedisp.innerHTML = "Name: "+localStorage.getItem('name'); 572 | name = localStorage.getItem('name'); 573 | } 574 | while (censorer < censored.length){ 575 | if (namehandler.value.toLowerCase().includes(censored[censorer].toLowerCase())){ 576 | namedisp.innerHTML = "Name: Censored"; 577 | name = "Censored"; 578 | localStorage.setItem('name',"Censored"); 579 | } 580 | censorer += 1; 581 | } 582 | //console.log('name>'+namehandler.value+'<'); 583 | 584 | // let starter = document.querySelector('.starter'); 585 | // starter.addEventListener('click', closeintro()); 586 | 587 | (async () => { 588 | if (firsttime && intropc <= 50){ 589 | intro1.style.opacity = intropc+'%'; 590 | intro.style.opacity = intropc*2+'%'; 591 | await sleep(2); 592 | intropc += 1; 593 | } 594 | })(); 595 | } 596 | 597 | // while (!startwaiter && door <= 100){ 598 | // ctx.beginPath(); 599 | // drawboard(); 600 | // drawapple(applepos[0],applepos[1],(height)/(boardSize*2.2)); 601 | // cir(pointsArr[0],pointsArr[1],(height)/(boardSize*2.2), snakeheadcolor,0,2); 602 | // //ctx.fillStyle = "rgb(0,0,0)"; 603 | // ctx.fillStyle = 'rgba(0,0,0,'+(100-door)/100+')'; 604 | // ctx.fillRect(bounderies[0]-byte,bounderies[1]-byte,bounderies[2]-bounderies[0]+2*byte,bounderies[3]-bounderies[1]+3*byte); 605 | // // ctx.fillRect(0,0,window.innerWidth,door); 606 | // // ctx.fillRect(0,window.innerHeight,window.innerWidth,-door); 607 | // await sleep(2); 608 | // ctx.clearRect(0,0,window.innerWidth,window.innerHeight); 609 | // door = door+(110-(door))/20; 610 | // } 611 | 612 | 613 | // let door = document.getElementById("door"); 614 | // let height = door.style.height; 615 | // while (height >= 10){ 616 | // door.style.height = height; 617 | // height = height-10; 618 | // await sleep(2); 619 | // } 620 | 621 | //await sleep(2); 622 | drawboard(); 623 | let i = 0; 624 | while (i <= pointsArr.length-1){ 625 | if (i > (pointsArr.length-15)){ 626 | // this is the head then 627 | // lemme get some eyes 628 | drawcircle(pointsArr[i],pointsArr[i+1],(height)/(boardSize*2.2), snakeheadcolor); 629 | ctx.beginPath(); 630 | ctx.fillStyle = 'rgb(0,0,0)'; 631 | let ratio = 1/2; 632 | let eyerad = (height)/(boardSize*2.2)/eyesize; 633 | let xfrac = (pointsArr[i]-bounderies[0])/(bounderies[2]-bounderies[0]); 634 | let yfrac = (pointsArr[i+1]-bounderies[1])/(bounderies[3]-bounderies[1]); 635 | if (xd > 0 || (xd == 0 && yd == 0)){ 636 | ctx.fillStyle = 'rgb(0,0,0)'; 637 | ctx.arc(pointsArr[i]+(height)/(boardSize*2.2)*ratio,pointsArr[i+1]-(height)/(boardSize*2.2)*ratio, (height)/(boardSize*2.2)/eyesize, 0, 2 * Math.PI); 638 | ctx.arc(pointsArr[i]+(height)/(boardSize*2.2)*ratio,pointsArr[i+1]+(height)/(boardSize*2.2)*ratio, (height)/(boardSize*2.2)/eyesize, 0, 2 * Math.PI); 639 | ctx.fill(); 640 | ctx.beginPath(); 641 | ctx.fillStyle = 'rgb(255,255,255)'; 642 | //console.log(xfrac,eyesize); 643 | // ctx.arc(pointsArr[i]+(height)/(boardSize*2.2)*ratio-eyerad+xfrac*(eyerad*2), pointsArr[i+1]-(height)/(boardSize*2.2)*ratio-eyerad+yfrac*(eyerad*2), ((height)/(boardSize*2.2)/eyesize)/2, 0, 2 * Math.PI); 644 | // ctx.arc(pointsArr[i]+(height)/(boardSize*2.2)*ratio-eyerad+xfrac*(eyerad*2), pointsArr[i+1]+(height)/(boardSize*2.2)*ratio-eyerad+yfrac*(eyerad*2), ((height)/(boardSize*2.2)/eyesize)/2, 0, 2 * Math.PI); 645 | // ctx.fill(); 646 | ctx.beginPath(); 647 | } 648 | if (xd < 0){ 649 | ctx.arc(pointsArr[i]-(height)/(boardSize*2.2)*ratio,pointsArr[i+1]-(height)/(boardSize*2.2)*ratio, (height)/(boardSize*2.2)/eyesize, 0, 2 * Math.PI); 650 | ctx.arc(pointsArr[i]-(height)/(boardSize*2.2)*ratio,pointsArr[i+1]+(height)/(boardSize*2.2)*ratio, (height)/(boardSize*2.2)/eyesize, 0, 2 * Math.PI); 651 | } 652 | if (yd < 0){ 653 | ctx.arc(pointsArr[i]+(height)/(boardSize*2.2)*ratio,pointsArr[i+1]-(height)/(boardSize*2.2)*ratio, (height)/(boardSize*2.2)/eyesize, 0, 2 * Math.PI); 654 | ctx.arc(pointsArr[i]-(height)/(boardSize*2.2)*ratio,pointsArr[i+1]-(height)/(boardSize*2.2)*ratio, (height)/(boardSize*2.2)/eyesize, 0, 2 * Math.PI); 655 | } 656 | if (yd > 0){ 657 | ctx.arc(pointsArr[i]+(height)/(boardSize*2.2)*ratio,pointsArr[i+1]+(height)/(boardSize*2.2)*ratio, (height)/(boardSize*2.2)/eyesize, 0, 2 * Math.PI); 658 | ctx.arc(pointsArr[i]-(height)/(boardSize*2.2)*ratio,pointsArr[i+1]+(height)/(boardSize*2.2)*ratio, (height)/(boardSize*2.2)/eyesize, 0, 2 * Math.PI); 659 | } 660 | 661 | ctx.fill(); 662 | } else { 663 | if (i % seglength*2 < seglength){ 664 | drawcircle(pointsArr[i],pointsArr[i+1],(height)/(boardSize*2.2), snakecolor1); 665 | } else { 666 | drawcircle(pointsArr[i],pointsArr[i+1],(height)/(boardSize*2.2), snakecolor2); 667 | } 668 | } 669 | 670 | //old overlapper 671 | // let j = 0; 672 | // if (j <= pointsArr.length-1 && false){ 673 | // if (pointsArr[i] == pointsArr[j] && pointsArr[i+1] == pointsArr[j+1] && i != j && pointsArr[j] != 0 && pointsArr[j+1] != 0 && pointsArr[j] != xpos && pointsArr[j] != ypos){ 674 | // // let z4 = document.getElementById('display'); 675 | // // z4.textContent = 'YOU HIT YOURSELF!'; 676 | // console.log('hit urself'); 677 | // //console.log(i,j); 678 | // //console.log(pointsArr[i],pointsArr[j]); 679 | // } 680 | // j += 1; 681 | // } 682 | 683 | i += 2; 684 | } 685 | 686 | drawapple(applepos[0],applepos[1],(height)/(boardSize*2.2)); 687 | xpos += xd; 688 | ypos += yd; 689 | counter += 1; 690 | await sleep(2); 691 | //console.log('drew at '+xpos+' '+ypos); 692 | pointsArr.push(xpos); 693 | pointsArr.push(ypos); 694 | pointsArr.shift(); 695 | pointsArr.shift(); 696 | 697 | if (Math.abs(xpos-applepos[0]) < (height)/(boardSize+2)/3 && Math.abs(ypos-applepos[1]) < (height)/(boardSize+2)/3){ 698 | //basically you got it 699 | // set lastapple 700 | //var audioElement2 = new Audio('eat.mp3'); 701 | //audioElement2.play(); 702 | lastapple = applepos; 703 | 704 | //relocate apple 705 | while (true) { 706 | old_applepos = applepos; 707 | applepos = [Math.floor(Math.random()*(boardSize-2))*(height)/(boardSize+2)+window.innerWidth/4+(height)/(boardSize+2)*1.5+(height)/(boardSize+2), Math.floor(Math.random()*(boardSize-2))*(height)/(boardSize+2)+(height)/(boardSize+2)+((height)/(boardSize+2)*1.5)]; 708 | works = true 709 | for (let i =0; i < pointsArr.length; i += 2) { 710 | if (applepos[0] == pointsArr[i] && applepos[1] == pointsArr[i + 1]) { 711 | works = false; break; 712 | } 713 | } 714 | 715 | if (works) { 716 | break; 717 | } 718 | 719 | } 720 | 721 | //ignore overlap for some time 722 | eatwaiter = 7; 723 | 724 | //update score 725 | score += 1; 726 | var z1 = document.getElementById('score'); 727 | z1.textContent = 'Score: '+score; 728 | //z1 = document.getElementById('leftscore'); 729 | //z1.textContent = 'Your current score: '+score; 730 | let z2 = document.getElementById('display'); 731 | let randnotif = Math.floor(Math.random()*6); 732 | if (randnotif == 0){ 733 | randnotif = "Good job!"; 734 | } else if (randnotif == 1){ 735 | randnotif = "Great job!"; 736 | } else if (randnotif == 2){ 737 | randnotif = "Awesome!"; 738 | } else if (randnotif == 3){ 739 | randnotif = "Nice!"; 740 | } else if (randnotif == 4){ 741 | randnotif = "Cringe!"; 742 | } else if (randnotif == 5){ 743 | randnotif = "🐍"; 744 | } 745 | 746 | z2.textContent = randnotif; 747 | 748 | if (autopilot){ 749 | let btn = document.getElementById('playbtn7'); 750 | btn.innerHTML = "Disable autopilot"; 751 | } 752 | 753 | 754 | //update length 755 | let z = 0; 756 | while (z < addlength){ 757 | pointsArr.push(0); 758 | pointsArr.push(0); 759 | z += 1; 760 | } 761 | } 762 | 763 | eatwaiter -= 1; 764 | 765 | let ct3 = window.innerWidth/4+(height)/(boardSize+2)*1.5; 766 | while (ct3 < xpos + (height)/(boardSize+2) && xd != 0){ 767 | if (Math.abs(ct3-xpos) < 2){ 768 | if (waiter == 'up'){ 769 | xd = 0; 770 | yd = -speed; 771 | } else if (waiter == 'down'){ 772 | xd = 0; 773 | yd = speed; 774 | } 775 | waiter = ''; 776 | if (waiter2 == 'up'){ 777 | xd = 0; 778 | yd = -speed; 779 | } else if (waiter2 == 'down'){ 780 | xd = 0; 781 | yd = speed; 782 | } 783 | waiter2 = ''; 784 | if (waiter3 == 'up'){ 785 | xd = 0; 786 | yd = -speed; 787 | } else if (waiter3 == 'down'){ 788 | xd = 0; 789 | yd = speed; 790 | } 791 | waiter3 = ''; 792 | } 793 | ct3 += (height)/(boardSize+2); 794 | } 795 | 796 | ct3 = ((height)/(boardSize+2)*1.5); 797 | while (ct3 < ypos + (height)/(boardSize+2) && yd != 0){ 798 | if (Math.abs(ct3-ypos) < 2){ 799 | if (waiter == 'right'){ 800 | xd = speed; 801 | yd = 0; 802 | } else if (waiter == 'left'){ 803 | xd = -speed; 804 | yd = 0; 805 | } 806 | waiter = ''; 807 | if (waiter2 == 'right'){ 808 | xd = speed; 809 | yd = 0; 810 | } else if (waiter2 == 'left'){ 811 | xd = -speed; 812 | yd = 0; 813 | } 814 | waiter2 = ''; 815 | if (waiter3 == 'right'){ 816 | xd = speed; 817 | yd = 0; 818 | } else if (waiter3 == 'left'){ 819 | xd = -speed; 820 | yd = 0; 821 | } 822 | waiter3 = ''; 823 | } 824 | ct3 += (height)/(boardSize+2); 825 | } 826 | // ct1 += (height)/(boardSize+2); 827 | 828 | // overlap experiment below 829 | let overlapgetter = 0; 830 | while (overlapgetter < pointsArr.length && !autopilot){ 831 | if (Math.abs(pointsArr[pointsArr.length-2]-pointsArr[overlapgetter]) < (height)/(boardSize+2)/10 && Math.abs(pointsArr[pointsArr.length-1]-pointsArr[overlapgetter+1]) < (height)/(boardSize+2)/10 && pointsArr[overlapgetter] != initxpos && pointsArr[overlapgetter] != 0 && pointsArr[overlapgetter+1] != initypos && pointsArr[overlapgetter+1] != 0 && Math.abs(pointsArr.length-2 -overlapgetter) > 75){ // no need for eatwaiter anymore but && eatwaiter < 0 832 | //overlapped 833 | if (eatwaiter < 0 || ((Math.abs(pointsArr[pointsArr.length-2]-lastapple[0])) > (height)/(boardSize+2)/10 && (Math.abs(pointsArr[pointsArr.length-1]-lastapple[1])) > (height)/(boardSize+2)/10)){ 834 | // checked to make sure wasnt last apple pos 835 | //console.log(pointsArr.length-2,overlapgetter); 836 | //console.log('overlapped'); 837 | //alert('you lost'); 838 | breaker = true; 839 | break; 840 | } 841 | } 842 | overlapgetter += 2; 843 | } 844 | 845 | if (breaker){ 846 | break; 847 | } 848 | 849 | // autopilot stuff below 850 | if (autopilot){ 851 | if (Math.abs(pointsArr[pointsArr.length-2]-applepos[0]) < 2*scalefactor){ // x coord is same and itsa not vertically moving 852 | if (pointsArr[pointsArr.length-1] > applepos[1]){ //snake is below apple 853 | waiter = 'up'; 854 | } else { 855 | waiter = 'down'; 856 | } 857 | //console.log(pointsArr[pointsArr.length-2], applepos[0]); // used to have && yd != 0 858 | } else if (Math.abs(pointsArr[pointsArr.length-1]-applepos[1]) < 2*scalefactor){ // y coord is same 859 | if (pointsArr[pointsArr.length-2] > applepos[0]){ //snake is right of apple 860 | waiter = 'left'; 861 | } else { 862 | waiter = 'right'; 863 | } 864 | //console.log(pointsArr[pointsArr.length-1], applepos[1]); 865 | } 866 | } 867 | 868 | if (autopilot){ 869 | if (Math.abs(pointsArr[pointsArr.length-2]-applepos[0]) < 7*scalefactor){ // x coord is same and itsa not vertically moving 870 | if (pointsArr[pointsArr.length-1] > applepos[1]){ //snake is below apple 871 | waiter = 'up'; 872 | } else { 873 | waiter = 'down'; 874 | } 875 | //console.log(pointsArr[pointsArr.length-2], applepos[0]); // used to have && yd != 0 876 | } else if (Math.abs(pointsArr[pointsArr.length-1]-applepos[1]) < 7*scalefactor){ // y coord is same 877 | if (pointsArr[pointsArr.length-2] > applepos[0]){ //snake is right of apple 878 | waiter = 'left'; 879 | } else { 880 | waiter = 'right'; 881 | } 882 | //console.log(pointsArr[pointsArr.length-1], applepos[1]); 883 | } 884 | 885 | if (Math.abs(pointsArr[pointsArr.length-2] - bounderies[0]) <= 40*scalefactor && yd == 0){ // close to left boundery 886 | if (pointsArr[pointsArr.length-1] > applepos[1]){ //snake is below apple 887 | waiter = 'up'; 888 | } else { 889 | waiter = 'down'; 890 | } 891 | //console.log('got triggered1'); 892 | } 893 | if (Math.abs(pointsArr[pointsArr.length-1] - bounderies[1]) <= 40*scalefactor && xd == 0){ 894 | if (pointsArr[pointsArr.length-2] > applepos[0]){ //snake is right of apple 895 | waiter = 'left'; 896 | } else { 897 | waiter = 'right'; 898 | } 899 | //console.log('got triggered'); 900 | } 901 | if (Math.abs(pointsArr[pointsArr.length-2] - bounderies[2]) <= 40*scalefactor && yd == 0){ 902 | if (pointsArr[pointsArr.length-1] > applepos[1]){ //snake is below apple 903 | waiter = 'up'; 904 | } else { 905 | waiter = 'down'; 906 | } 907 | } 908 | if (Math.abs(pointsArr[pointsArr.length-1] - bounderies[3]) <= 40*scalefactor && xd == 0){ 909 | if (pointsArr[pointsArr.length-2] > applepos[0]){ //snake is right of apple 910 | waiter = 'left'; 911 | } else { 912 | waiter = 'right'; 913 | } 914 | } 915 | 916 | } 917 | //console.log('-- ', breaker); 918 | if (breaker){ 919 | break; 920 | breaker = false; 921 | } 922 | } 923 | //console.log('did whole thing'); 924 | let z3 = document.getElementById('display'); 925 | z3.textContent = 'Game over! reload to play again'; 926 | //alert('You lost'); 927 | 928 | //set up buttons for endgame 929 | 930 | let displaydiv = document.getElementById('endgame-display'); 931 | let displaydiv2 = document.getElementById('endgame-display2'); 932 | let displaydiv1 = document.getElementById('endgame-display1'); 933 | let play_again = document.getElementById('play_again'); 934 | let leaderboard = document.getElementById('leaderboard'); 935 | let leaderboard1 = document.getElementById('leaderboard2'); 936 | displaydiv.style.left = bounderies[0]+(1/10)*(bounderies[2]-bounderies[0])+"px"; 937 | displaydiv.style.top = bounderies[1]+(1/5*(bounderies[3]-bounderies[1]))+"px"; 938 | displaydiv.style.height = bounderies[0]+(1/5*(bounderies[2]-bounderies[0]))+"px"; 939 | displaydiv1.style.left = bounderies[0]+(1/10)*(bounderies[2]-bounderies[0])+"px"; 940 | displaydiv1.style.top = bounderies[1]+(4.35/5)*(bounderies[3]-bounderies[1])+"px"; 941 | displaydiv2.style.left = bounderies[0]+"px"; 942 | displaydiv2.style.width = (bounderies[2]-bounderies[0])+"px"; 943 | displaydiv2.style.top = bounderies[1]+(2/5)*(bounderies[3]-bounderies[1])+"px"; 944 | displaydiv1.style.height = bounderies[0]+(1/5*(bounderies[2]-bounderies[0]))+"px"; 945 | play_again.style.width = (8/10)*(bounderies[2]-bounderies[0])+"px"; 946 | play_again.style.height = (1/5)*(bounderies[3]-bounderies[1])+"px"; 947 | play_again.style.font = 64*scalefactor+"px"; 948 | leaderboard.style.width = (8/10)*(bounderies[2]-bounderies[0])+"px"; 949 | leaderboard.style.height = (1/5)*(bounderies[3]-bounderies[1])+"px"; 950 | leaderboard.style.font = 64*scalefactor+"px"; 951 | leaderboard1.style.width = (8/10)*(bounderies[2]-bounderies[0])+"px"; 952 | leaderboard1.style.height = (1/5)*(bounderies[3]-bounderies[1])+"px"; 953 | leaderboard1.style.top = bounderies[1]+(5/5)*(bounderies[3]-bounderies[1])+"px"; 954 | leaderboard1.style.font = 64*scalefactor+"px"; 955 | //leaderboard1.addEventListener('click', sendit('hello','world')); 956 | //displaydiv.style.paddingBottom = (3/5)*(bounderies[3]-bounderies[1])+"px"; 957 | //displaydiv.style.margin-bottom = 50*scalefactor+"px"; 958 | displaydiv2.style.fontSize = 32*scalefactor+"px"; 959 | let thisthing = displaydiv2.children; 960 | thisthing = document.getElementById("endgamenotif2"); 961 | thisthing.innerHTML = "Score: "+score; 962 | thisthing = document.getElementById("endgamenotif3"); 963 | thisthing.innerHTML = "Time alive: "+elapsedtime+" seconds"; 964 | name = document.getElementById('name'); 965 | name = name.value; 966 | 967 | // game over animation 968 | ctx.beginPath; 969 | 970 | (async () => { 971 | 972 | setTimeout(function(){ 973 | 974 | (async () => { 975 | let z = 0; 976 | while (z < 50){ 977 | //drawboard(); 978 | let i = 0; 979 | while (i <= pointsArr.length-1){ 980 | if (i <= (pointsArr.length-15)){ 981 | if (i % seglength*2 < seglength){ 982 | cir(pointsArr[i],pointsArr[i+1],(height)/(boardSize*2.2), snakecolor1,0,2); 983 | } else { 984 | cir(pointsArr[i],pointsArr[i+1],(height)/(boardSize*2.2), snakecolor2,0,2); 985 | } 986 | } else { 987 | // this is the head 988 | let se = 0; 989 | while (se < 2){ 990 | cir(pointsArr[i],pointsArr[i+1],(height)/(boardSize*2.2)+z*scalefactor, snakeheadcolor,se,se+0.1); 991 | se += 0.2; 992 | } 993 | } 994 | i += 2; 995 | } 996 | await sleep(2); 997 | z += (55-z)/20; 998 | } 999 | snakeclr2 += "5RFVrN0fOLs7"; 1000 | })(); 1001 | },0); 1002 | 1003 | snakeclr += "CFd34qrd"; 1004 | 1005 | setTimeout(function(){ 1006 | animateboard(); 1007 | }, 1200); 1008 | 1009 | snakeclr += "gMt3pdc"; 1010 | 1011 | setTimeout(function(){ 1012 | try { 1013 | namedisp = document.getElementById('namedisplay'); 1014 | name = namedisp.innerHTML.replace('Name: ',''); 1015 | //console.log(name); 1016 | let sendname = '&='+name; 1017 | if (sendname == '&='){ 1018 | sendname = "&= "; 1019 | } 1020 | let senddata = '&='+score+'&t'+elapsedtime; 1021 | snakeclr += "RV4Gt3x5"; 1022 | 1023 | if (!autopilot){ 1024 | if (localStorage.getItem("best") < score){ 1025 | localStorage.setItem('best', score); 1026 | } 1027 | } 1028 | 1029 | (async () => { 1030 | const { Octokit } = await import('https://cdn.skypack.dev/@octokit/core'); 1031 | console.log('sent?'); 1032 | snakeclr3 += "5RFVrN0fOLs7" 1033 | const data1 = await fetch("./tk.json").then(r => r.json()); 1034 | var datanames = data1.data[0]; 1035 | datanames = JSON.stringify(datanames); 1036 | datanames = datanames.replace('{"name":"',''); 1037 | datanames = datanames.replace('"}',''); 1038 | const octokit = new Octokit({ auth: datanames}); 1039 | 1040 | console.log('ye'); 1041 | // acutally do it rn 1042 | if (true && !autopilot && score != 0){ 1043 | async function start(){ 1044 | try { 1045 | //console.log('into'); 1046 | //console.log('done'); 1047 | return await octokit.request('POST /repos/skparab1/snake/issues', { 1048 | owner: 'skparab1', 1049 | repo: 'snake', 1050 | title: sendname, 1051 | body: senddata, 1052 | }) 1053 | } catch(error) { 1054 | notif = document.getElementById('notif'); 1055 | notif.style.display = "block"; 1056 | notif.innerHTML = '

Unable to write to database. Check your network connection. '+error+'

'; 1057 | //console.log('couldnt send'); 1058 | } 1059 | }; 1060 | start(); 1061 | } 1062 | })(); 1063 | } catch(error) { 1064 | notif = document.getElementById('notif'); 1065 | notif.style.display = "block"; 1066 | notif.innerHTML = '

Unable to write to database. Check your network connection. '+error+'

'; 1067 | 1068 | } 1069 | 1070 | // this might be cool if we do it right 1071 | // ok so basically draw the board but do it nicely 1072 | (async () => { 1073 | //snakeclr1 += "o7r9gGt"; 1074 | //snakeclr2 += "FFFA230"; 1075 | ctx.beginPath; 1076 | ctx.fillStyle = bordercolor; 1077 | 1078 | let closer = document.getElementById('introducer'); 1079 | let closer1 = document.getElementById('introducer-cover'); 1080 | let closer2 = document.getElementById('credits'); 1081 | let closer3 = document.getElementById('snakestyle'); 1082 | 1083 | closer.style.display = "none"; 1084 | closer1.style.display = "none"; 1085 | closer2.style.display = "none"; 1086 | closer3.style.display = "none"; 1087 | 1088 | let endgame = 0; 1089 | let bordereraser = 0; 1090 | while (endgame <= bounderies[3] - (bounderies[3]-bounderies[1])/2){ 1091 | ctx.fillStyle = theme; 1092 | ctx.fillRect(bounderies[0]-(height)/(boardSize+2), bounderies[1], -bordereraser, bounderies[3]-bounderies[1]); 1093 | ctx.fillRect(bounderies[0], bounderies[1], bounderies[2]-bounderies[0], -bordereraser); 1094 | ctx.fillRect(bounderies[2]+(height)/(boardSize+2), bounderies[1], bordereraser, bounderies[3]-bounderies[1]); 1095 | //ctx.fillRect(bounderies[2], bounderies[3], bounderies[2]-bounderies[0], bordereraser); 1096 | ctx.fillStyle = bordercolor; 1097 | ctx.fillRect(bounderies[0]-(height)/(boardSize+2), bounderies[1]-(height)/(boardSize+2), bounderies[3]-bounderies[1]+2*(height)/(boardSize+2), endgame+(height)/(boardSize+2)) 1098 | ctx.fillRect(bounderies[0]-(height)/(boardSize+2), bounderies[1]+bounderies[3], bounderies[3]-bounderies[1]+2*(height)/(boardSize+2), -endgame) 1099 | endgame += 4; 1100 | bordereraser += 1; 1101 | await sleep(endcurtainspeed); 1102 | } 1103 | 1104 | displaydiv.style.display = "inline-block"; 1105 | displaydiv1.style.display = "inline-block"; 1106 | displaydiv2.style.display = "inline-block"; 1107 | 1108 | leaderboard.style.color = "rgb(0,"+100+",0)"; 1109 | play_again.style.color = "rgb(0,"+100+",0)"; 1110 | play_again.style.bordercolor = "rgb(0,"+100+",0)"; 1111 | 1112 | endgame = 0; 1113 | while (endgame <= bounderies[3]-(height)/(boardSize+2)){ 1114 | ctx.fillStyle = pixelbackground2; 1115 | ctx.fillRect(bounderies[0],bounderies[1],bounderies[2]-bounderies[0],bounderies[3]-bounderies[1]); 1116 | 1117 | play_again.style.color = "rgb(0,"+(100*endgame/(bounderies[3]-(height)/(boardSize+2))+100)+",0)"; 1118 | leaderboard.style.color = "rgb(0,"+(100*endgame/(bounderies[3]-(height)/(boardSize+2))+100)+",0)"; 1119 | 1120 | ctx.fillStyle = bordercolor; 1121 | ctx.fillRect(bounderies[0]-(height)/(boardSize+2), bounderies[1]+(bounderies[3]-bounderies[1])/2, bounderies[3]-bounderies[1]+2*(height)/(boardSize+2), bounderies[3]-endgame) 1122 | ctx.fillRect(bounderies[0]-(height)/(boardSize+2), bounderies[1]+(bounderies[3]-bounderies[1])/2, bounderies[3]-bounderies[1]+2*(height)/(boardSize+2), -(bounderies[3]-endgame)) 1123 | endgame += 10; 1124 | await sleep(endcurtainspeed); 1125 | } 1126 | 1127 | endgame = 0; 1128 | ctx.strokeStyle = 'rgb(0,0,0)'; 1129 | ctx.font = 64*scalefactor+"px Arial"; 1130 | ctx.lineWidth = '10px'; 1131 | while (endgame <= bounderies[3]/2+(height)/(boardSize+2)/2){ 1132 | ctx.fillStyle = pixelbackground2; 1133 | ctx.fillRect(bounderies[0],bounderies[1],bounderies[2]-bounderies[0],bounderies[3]-bounderies[1]); 1134 | //ctx.strokeRect(bounderies[0],bounderies[1]+(bounderies[3]-bounderies[1])/2-(height)/(boardSize+2),(bounderies[2]-bounderies[0])+(height)/(boardSize+2),2*(height)/(boardSize+2)); 1135 | ctx.fillStyle = 'rgb(0,0,0)'; 1136 | //ctx.fillText("GAME OVER!", bounderies[0]+(bounderies[2]-bounderies[0])/4-(height)/(boardSize+2), bounderies[1]+(bounderies[3]-bounderies[1])/2+(height)/(boardSize+2)*7/8); 1137 | ctx.fillStyle = bordercolor; 1138 | ctx.fillRect(bounderies[0], bounderies[1]+(bounderies[3]-bounderies[1])/2-(height)/(boardSize+2),(bounderies[2]-bounderies[0])/2-endgame, (height)/(boardSize+2)*2); 1139 | ctx.fillRect(bounderies[2], bounderies[1]+(bounderies[3]-bounderies[1])/2-(height)/(boardSize+2),-((bounderies[2]-bounderies[0])/2-endgame), (height)/(boardSize+2)*2); 1140 | endgame += 10; 1141 | await sleep(endcurtainspeed); 1142 | } 1143 | leaderboard.style.display = "block"; 1144 | play_again.style.display = "block"; 1145 | snakeclr += ""; 1146 | lost = true; 1147 | })(); 1148 | },1500); 1149 | })(); 1150 | })(); 1151 | 1152 | (async () => { 1153 | window.addEventListener("keydown", function(event) { 1154 | 1155 | if (event.defaultPrevented) { 1156 | return; 1157 | } 1158 | 1159 | 1160 | if (!startwaiter && (closedintro)){ 1161 | xd = speed; 1162 | startwaiter = true; 1163 | let z = document.getElementById('display'); 1164 | z.textContent = '🐍'; 1165 | fpslst = []; 1166 | lastfps = Date.now(); 1167 | fpslst = []; 1168 | } 1169 | 1170 | const ctx = canvas.getContext('2d'); 1171 | 1172 | let actkey = event.code.replace('Key','') 1173 | let filterletters = 'QWERTYUIOPASDFGHJKLZXCVBNM'; 1174 | //console.log('pressed'+actkey); 1175 | 1176 | if (lost && actkey == 'P' && closedintro){ 1177 | location.reload(); 1178 | } 1179 | if (lost && actkey == "L" && closedintro){ 1180 | window.location.href = 'https://skparab1.github.io/snake/leaderboard.html'; 1181 | } 1182 | 1183 | if (waiter == ''){ 1184 | if (actkey == 'ArrowLeft' || actkey == 'A'){ 1185 | waiter = 'left'; 1186 | } 1187 | if (actkey == 'ArrowRight' || actkey == 'D'){ 1188 | waiter = 'right'; 1189 | } 1190 | if (actkey == 'ArrowUp' || actkey == 'W'){ 1191 | waiter = 'up'; 1192 | } 1193 | if (actkey == 'ArrowDown' || actkey == 'S'){ 1194 | waiter = 'down'; 1195 | } 1196 | } else { 1197 | if (waiter2 == ''){ 1198 | if (actkey == 'ArrowLeft' || actkey == 'A'){ 1199 | waiter2 = 'left'; 1200 | } 1201 | if (actkey == 'ArrowRight' || actkey == 'D'){ 1202 | waiter2 = 'right'; 1203 | } 1204 | if (actkey == 'ArrowUp' || actkey == 'W'){ 1205 | waiter2 = 'up'; 1206 | } 1207 | if (actkey == 'ArrowDown' || actkey == 'S'){ 1208 | waiter2 = 'down'; 1209 | } 1210 | } else { 1211 | if (actkey == 'ArrowLeft' || actkey == 'A'){ 1212 | waiter3 = 'left'; 1213 | } 1214 | if (actkey == 'ArrowRight' || actkey == 'D'){ 1215 | waiter3 = 'right'; 1216 | } 1217 | if (actkey == 'ArrowUp' || actkey == 'W'){ 1218 | waiter3 = 'up'; 1219 | } 1220 | if (actkey == 'ArrowDown' || actkey == 'S'){ 1221 | waiter3 = 'down'; 1222 | } 1223 | } 1224 | } 1225 | 1226 | // i think i get how to do it 1227 | // just have a waiter variable thats set by this 1228 | // and then chnage directsion when it gets to the ting and clear the waiter 1229 | 1230 | //actkey is just the thing 1231 | 1232 | }, true); 1233 | })(); 1234 | -------------------------------------------------------------------------------- /data.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1", 3 | "data": [ 4 | { 5 | "name": "skparab1&=skparab1&=skparab1&=Shubham&=skparab1&=-&=Shubham&=Shubham&=Shubham&=-&=null&=ManavIsGoodBoy&=-&=Advaita&=Dog&=Advaita&=ManavIsGoodBoy&=Advaita&=Advaita&=Advaita&=ManavIsGoodBoy&=Dog&=ManavIsGoodBoy&=Advaita&=Advaita&=Advaita&=Advaita&=Advaita&=Skparab1&=Advaita&=Advaita&=Advaita&=Advaita&=Advaita&=Advaita&=Advaita&=ManavIsGoodBoy&=Advaita&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=null&=nguyenisfree&=nguyenisfree&=nguyenisfree&=nguyenisfree&=ManavIsGoodBoy&= &=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=&=ManavIsGoodBoy&=null&=ȉcëbòwxḃơẅģőbliǹebaŕreļpekkáļogbaǐẗiņfęȓnotǫwḙr2.6pǫģridęrmũskétęerskelȩtọnsḅattlẽheàlȩŗínfeṟņơdŕągơnȉcëbòwxḃơẅģőbliǹebaŕreļpekkáļogbaǐẗiņfęȓnotǫwḙr2.6pǫģridęrmũskétęerskelȩtọnsḅattlẽheàlȩŗínfeṟņơdŕągơnȉcëbòwxḃơẅģőbliǹebaŕreļpekkáļogbaǐẗiņfęȓnotǫwḙr2.6pǫģridęrmũskétęerskelȩtọnsḅattlẽheàlȩŗínfeṟņơdŕągơn&=SHubham&=-&=null&=ur mom&=null&=null&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=SHubham&=r2&=r2&=Skparab1&=Skparab1&=Skparab1&=-&=Shubham&=Shubham&=Shubham&=Shubham&=-&=-&=-&=Shubham&=null&=Shubham&=Shubham&=Shubham&=a&=a&=a&=a&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=Dog&=Dog&=3MS Mobile&=3MS Mobile&=-&=3MS Mobile&=3MS Mobile&=-&=3MS Mobile&=-&=-&=-&=-&=-&=null&=null&=null&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=3MS Mobile&=Advaita&=3MS Mobile&=3MS Mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=Shubham&=Shubham&=Skparab1&=Skparab1&=gonna beat 3ms mobile&=ritam&=ritam&=ritam&= &= &=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=gonna beat 3ms mobile&=ritam&=gonna beat 3ms mobile&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&= &=gonna beat 3ms mobile&=gonna beat 3ms mobile&= &= &= &= &=clashroyale&=clashroyale&=clashroyale&=clashroyale&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=clashroyale&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=clashroyale&=gonna beat 3ms mobile&=null&=null&=null&=null&=null&=gonna beat 3ms mobile&=null&=null&=null&=null&=null&=null&=null&=Skparab1&=abhinav bob&=abhinav bob&=null&=abhinav bob&=abhinav bob&=abhinav bob&=null&=abhinav bob&=abhinav bob&=null&=j&=abhinav bob&= &=null&= &=null&=abhinav bob&=abhinav bob&=abhinav bob&=gonna beat 3ms mobile&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=null&=abhinav bob&=null&= &=abhinav bob&=abhinav bob&=abhinav bob&=null&=abhinav bob&=null&=abhinav bob&=null&=abhinav bob&=null&=abhinav bob&=null&=null&=abhinav bob&=null&=null&=null&=null&=null&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=null&=null&=abhinav bob&=null&=abhinav bob&=null&=abhinav bob&=null&=null&=null&=abhinav bob&=null&=abhinav bob&=abhinav bob&=abhinav bob&=abhinav bob&=adan&=adan&= &=adan&= &=null&= &=null&=abhinav bob&= &=abhinav bob&=easy&= &=null&=easy&=null&=null&=null&=null&= &= &= &= &= &= &=null&=null&= &= &= &=null&= &=ManavIsGoodBoy&=gonna beat 3ms mobile&=gonna beat 3ms mobile&= &=SHubham&= &= &= &= &= &= &=3MS Mobile&=null&=null&=null&=null&=null&= &= &= &=null&=null&=null&=null&=null&=null&=null&=null&= &= &= &=clashroyale&=clashroyale&=clashroyale&=clashroyale&=null&= &= &= &= &= &= &=clashroyale&=null&=null&= &= &= &= &= &= &= &= &= &= &= &=Shubham Parab&= &= &= &= &= &=Shubham Parab&=Shubham Parab&=Shubham Parab&=null&=null&=null&= &= &=null&= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &=null&=null&=null&=null&=null&=null&=Shubham Parab&=Shubham Parab&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=ManavIsGoodBoy&=null&=null&=null&=null&=Skparab1&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=agastya&=agastya&=agastya&=agastya&=agastya&=agastya&=null&=null&=agastya&=agastya&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=gonna beat 3ms mobile&=null&=null&=null&=null&=null&=null&=null&=cg69420&=cg69420&=cg69420&=cg69420&=cg69420&=cg69420&=cg69420&=cg69420&=cg69420&=cg69420&=cg69420&=null&=null&=null&=null&=cg69420&=cg69420&=null&=null&=cg69420&=null&=null&=null&=null&=cg69420&=cg69420&=null&=null&=null&=null&=null&=cg69420&=cg69420&=cg69420&=null&=null&= &= &= &= &= &= &= &=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=gonna beat 3ms mobile&=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=null&=agastya&=agastya&=agastya&=agastya&=agastya&=null&=null&=null&=stalin&=null&=gonna beat 3ms mobile&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=Marc" 6 | }, 7 | { 8 | "scores": "8&t36.997&=7&t18.458&=0&t0&=13&t38.261&=0&t0&=5&t13.94&=0&t4.606&=2&t6.87&=12&t35.391&=0&t245.909&=0&t0&=1&t18.695&=3&t74.215&=0&t17.316&=0&t12.758&=1&t2.862&=1&t9.544&=1&t8.703&=0&t3.367&=0&t2.58&=3&t25.967&=0&t5.105&=0&t4.925&=2&t23.538&=0&t2.783&=0&t6.384&=0&t4.464&=1&t3.221&=0&t7.961&=0&t0&=0&t2.691&=0&t4.192&=0&t2.605&=1&t3.74&=2&t3.734&=0&t4.185&=4&t12.235&=4&t20.661&=0&t4.455&=3&t9.687&=2&t8.863&=5&t17.593&=1&t6.263&=0&t4.957&=0&t0&=0&t26.584&=1&t4.986&=1&t3.081&=2&t4.029&=7&t30.915&=0&t12.508&=4&t34.821&=1&t5.474&=4&t8.094&=0&t1.58&=0&t8.999&=3&t16.051&=0&t1.034&=3&t5.741&=0&t1.865&=6&t13.27&=0&t0&=5&t36.583&=5&t17.123&=14&t78.076&=0&t0&=0&t5.516&=1&t9.712&=4&t15.11&=5&t24.175&=1&t10.697&=0&t6.081&=12&t69.818&=8&t36.773&=3&t30.164&=3&t17.417&=0&t949.395&=0&t32.511&=10&t40.979&=1&t10.072&=12&t63.613&=1&t5.233&=0&t3156.912&=3&t6.577&=7&t14.95&=4&t8.896&=7&t18.636&=4&t23.665&=4&t14.93&=16&t58.37&=0&t2.507&=0&t0&=6&t15.637&=12&t39.706&=14&t84.028&=2&t221.381&=5&t16.93&=3&t11.187&=4&t10.799&=3&t5.464&=3&t13.886&=9&t30.613&=1&t7.697&=2&t5.589&=3&t6.444&=4&t8.149&=1&t22.328&=2&t12.295&=22&t85.321&=0&t3.623&=5&t51.514&=2&t33.426&=2&t9.659&=3&t8.673&=11&t39.304&=1&t6.048&=2&t18.357&=0&t12.628&=0&t5.27&=0&t13.738&=0&t0&=0&t0&=0&t3.237&=0&t23.189&=7&t19.734&=5&t16.506&=15&t58.081&=0&t3.441&=9&t15.685&=8&t20.33&=4&t8.863&=4&t11.525&=4&t9.278&=2&t64.206&=13&t79.898&=16&t100.578&=17&t129.807&=21&t132.165&=1&t5.729&=2&t2.052&=13&t34.297&=3&t9.74&=7&t15.451&=5&t10.952&=0&t1.38&=3&t13.58&=2&t4.982&=13&t41.498&=1&t3.109&=0&t0.907&=18&t51.157&=2&t5.687&=1&t5.013&=2&t2.746&=0&t1.926&=9&t23.274&=11&t28.775&=7&t13.885&=2&t4.247&=10&t24.022&=4&t13.967&=7&t14.562&=7&t19.505&=1&t2.157&=2&t7.473&=4&t10.309&=12&t36.521&=10&t19.623&=6&t13.044&=1&t3.438&=2&t5.167&=2&t9.827&=9&t30.289&=11&t23.002&=18&t40.498&=9&t23.383&=16&t52.527&=10&t15.471&=19&t40.18&=5&t13.768&=10&t20.302&=7&t15.57&=2&t8.674&=5&t7.243&=11&t26.426&=4&t6.626&=6&t19.078&=9&t28.202&=6&t9.851&=5&t8.604&=0&t4.159&=11&t59.936&=34&t252.12&=4&t26.251&=0&t241.263&=5&t44.114&=3&t14.509&=7&t35.971&=1&t2.26&=7&t28.644&=8&t53.784&=1&t7.738&=4&t12.273&=2&t7.717&=0&t4.117&=0&t5.361&=4&t16.972&=1&t6.823&=1&t6.202&=3&t12.842&=0&t3.187&=1&t9.667&=1&t2.249&=1&t2.303&=4&t16.702&=5&t22.156&=12&t39.276&=5&t21.392&=7&t24.464&=7&t33.111&=5&t25.697&=8&t13.883&=3&t14.598&=6&t15.343&=6&t16.674&=3&t6.409&=1&t7.272&=7&t22.968&=0&t2.545&=7&t30.692&=5&t32.114&=0&t0.741&=0&t1.891&=3&t7.907&=1&t2.385&=2&t7.578&=2&t10.045&=9&t18.497&=6&t24.721&=4&t16.608&=8&t18.018&=0&t4.235&=3&t10.158&=7&t28.197&=11&t54.63&=2&t5.636&=11&t40.456&=9&t18.175&=3&t6.043&=1&t7.25&=0&t1.406&=2&t3.251&=2&t3.961&=3&t6.548&=0&t2.201&=0&t2.049&=8&t13.876&=3&t5.858&=9&t25.48&=2&t7.929&=11&t39.575&=6&t12.712&=10&t23.058&=6&t13.099&=8&t26.592&=3&t5.704&=7&t35.435&=1&t1.691&=0&t1.887&=12&t28.634&=9&t31.054&=12&t29.086&=0&t0&=0&t1084.68&=0&t4.959&=0&t0&=4&t11.427&=1&t9.29&=10&t25.029&=12&t33.525&=8&t21.232&=8&t20.593&=1&t6.89&=0&t2.608&=0&t3.762&=0&t11.308&=0&t7.485&=0&t4.075&=0&t3.21&=0&t4.656&=4&t7.9&=6&t21.355&=0&t7.93&=0&t212.739&=1&t8.057&=0&t4.887&=0&t12.351&=1&t4.084&=1&t15.345&=0&t69.273&=0&t2.175&=0&t2.132&=4&t16.099&=1&t3.285&=1&t3.85&=6&t44.098&=2&t11.345&=12&t52.719&=0&t27.454&=0&t5.638&=0&t10.008&=3&t16.225&=0&t2.486&=3&t5.048&=0&t23.042&=5&t20.277&=2&t6.781&=0&t3.726&=0&t5.763&=4&t10.559&=0&t1.32&=1&t13.527&=2&t5.975&=0&t2.172&=10&t15.63&=2&t11.193&=1&t9.8&=0&t286.583&=1&t4.701&=2&t6.715&=3&t3.348&=6&t19.82&=11&t25.968&=0&t5.082&=1&t10.186&=7&t21.855&=0&t2.684&=5&t11.858&=0&t6.778&=6&t16.859&=0&t1.929&=2&t11.086&=8&t26.957&=3&t9.328&=2&t6.491&=0&t0&=4&t12.722&=0&t5.038&=2&t11.054&=0&t3.085&=1&t2.06&=0&t2.359&=7&t36.286&=1&t5.789&=0&t4.724&=10&t19.913&=0&t2.365&=3&t6.261&=4&t10.357&=4&t20.9&=0&t2&=0&t2.035&=0&t5.803&=5&t19.681&=0&t0&=2&t11.589&=5&t19.001&=4&t19.2&=1&t1.709&=4&t10.186&=0&t1.72&=2&t3.145&=1&t7.662&=5&t14.718&=4&t20.833&=2&t2.925&=2&t3.708&=4&t11.312&=0&t2.105&=1&t3.981&=5&t24.483&=1&t5.121&=6&t22.198&=0&t24.383&=1&t8.932&=1&t9.579&=3&t17.334&=2&t12.836&=1&t5.421&=3&t13.947&=3&t6.938&=6&t26.028&=0&t0&=0&t1.779&=9&t43.774&=1&t6.173&=0&t5.729&=12&t45.634&=2&t6.439&=0&t8.01&=2&t4.48&=0&t4.711&=0&t2.947&=0&t3.414&=0&t3.426&=0&t3.225&=0&t6.455&=8&t40.286&=0&t15.336&=0&t4.95&=0&t4.786&=3&t9.287&=0&t1.92&=0&t6.079&=1&t5.347&=1&t4.469&=0&t2763.659&=10&t26.813&=1&t6.172&=0&t4.254&=0&t2.573&=1&t2.246&=0&t2.647&=0&t1.667&=0&t3.291&=0&t2.056&=6&t28.735&=0&t8.896&=1&t3.096&=0&t8.977&=2&t12.385&=0&t6.493&=1&t6.608&=1&t4.883&=5&t11.096&=0&t16.187&=0&t4.966&=0&t13.665&=1&t10.454&=0&t3.521&=1&t13.168&=2&t10.912&=8&t25.098&=1&t6488.967&=0&t2.234&=2&t7.095&=0&t0&=0&t5.028&=0&t1.904&=5&t22.021&=1&t5.702&=4&t15.158&=1&t2.394&=0&t5.624&=1&t3.696&=1&t6.372&=3&t5.418&=0&t13.432&=2&t8.005&=1&t4.424&=1&t4.419&=0&t3.611&=0&t2.201&=1&t5.352&=0&t2.69&=2&t8.82&=1&t6.245&=1&t3.011&=0&t3.686&=1&t3.07&=0&t2.027&=8&t46.157&=0&t13.312&=1&t3.112&=0&t2.654&=1&t4.42&=2&t5.116&=7&t34.062&=4&t13.967&=6&t36.027&=2&t8.579&=0&t3.425&=1&t24.847&=0&t2.172&=5&t10.533&=3&t10.935&=1&t4.206&=2&t5.572&=0&t2.296&=1&t9.112&=1&t4.521&=2&t3.25&=0&t3.356&=0&t0.905&=0&t1.161&=0&t3.069&=0&t6.741&=0&t3.075&=1&t1.341&=1&t6.604&=2&t6.234&=1&t2.891&=3&t11.443&=0&t0.586&=2&t4.628&=4&t13.864&=4&t23.423&=5&t22.611&=14&t87.17&=11&t59.285&=0&t1.873&=0&t3.379&=0&t2.536&=0&t3.415&=0&t2.122&=8&t25.528&=16&t59.104&=4&t15.709&=0&t0.513&=5&t9.536&=5&t10.323&=2&t12.069&=0&t1.265&=8&t21.149&=0&t4.216&=1&t7.103&=2&t8.17&=1&t13.059&=2&t7.555&=2&t8.803&=6&t22.944&=1&t25.086&=1&t1.941&=1&t3.96&=6&t19.928&=11&t31.94&=20&t82.132&=20&t73.599&=2&t4.345&=3&t6.234&=1&t1.585&=18&t46.705&=14&t30.146&=2&t4.305&=16&t86.91&=5&t17.724&=11&t35.487&=5&t12.999&=15&t52.072&=12&t26.568&=12&t82.134&=7&t23.619&=2&t11.274&=9&t30.889&=3&t4.771&=5&t8.708&=10&t40.358&=27&t132.342&=2&t2.51&=23&t82.102&=1&t1.054&=9&t19.401&=6&t13.731&=4&t6.874&=5&t11.511&=9&t15.815&=4&t11.854&=3&t5.177&=7&t12.418&=2&t3.714&=2&t8.377&=1&t4.534&=2&t12.285&=14&t35.776&=1&t2.587&=4&t10.158&=4&t12.409&=7&t20.034&=2&t2.914&=4&t9.603&=5&t20.16&=1&t4.962&=16&t47.009&=5&t9.2&=3&t5.76&=2&t15.568&=4&t25.928&=4&t12.77&=1&t1.264&=3&t6.194&=21&t53.242&=1&t0.33&=1&t8.528&=2&t7.044&=2&t6.233&=1&t2.456&=9&t24.31&=7&t20.666&=5&t15.82&=1&t4.281&=2&t16.449&=10&t37.837&=3&t16.67&=13&t53.141&=6&t16.982&=13&t48.211&=1&t9.309&=11&t92.845&=2&t10.916&=6&t27.68&=18&t66.07&=17&t66.238&=5&t22.938&=12&t66.773&=13&t54.607&=2&t11.713&=8&t29.057&=1&t11.672&=3&t10.59&=5&t26.369&=7&t27.141&=1&t4.126&=1&t3.971&=7&t24.442&=2&t13.102&=14&t43.699&=1&t3.721&=1&t4.227&=2&t6.369&=4&t18.473&=3&t12.645&=3&t11.876&=2&t10.897&=3&t9.388&=2&t8.899&=2&t5.398&=1&t3.222&=4&t8.686&=1&t10.739&=5&t16.684&=1&t1.459&=3&t10.593&=7&t18.875&=17&t64.678" 9 | } 10 | ], 11 | "secondArray": [ 12 | { 13 | "secondId": "" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /data2.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1", 3 | "data": [ 4 | { 5 | "name": "&=gonna beat 3ms mobile&= &=null&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=null&=null&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=null&=3MS Mobile&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=stop censoring me&=stop censoring me&=null&=null&=gonna beat 3ms mobile&=Developers: Shubham Parab, Anindit Pati, and Agastya Pawate Design: Anindit Pati and Shubham Parab Music: Advaita Guruprasad&=Developers: Shubham Parab, Anindit Pati, and Agastya Pawate Design: Anindit Pati and Shubham Parab Music: Advaita Guruprasad&=Developers: Shubham Parab, Anindit Pati, and Agastya Pawate Design: Anindit Pati and Shubham Parab Music: Advaita Guruprasad&=Developers: Shubham Parab, Anindit Pati, and Agastya Pawate Design: Anindit Pati and Shubham Parab Music: Advaita Guruprasad&=ur mom&=Developers: Shubham Parab, Anindit Pati, and Agastya Pawate Design: Anindit Pati and Shubham Parab Music: Advaita Guruprasad&=Developers: Shubham Parab, Anindit Pati, and Agastya Pawate Design: Anindit Pati and Shubham Parab Music: Advaita Guruprasad&=ur mom&=ur mom&=ur mom&=ur mom&=gonna beat 3ms mobile&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=SHubham&=null&=null&=stop censoring me&=null&=null&=null&=null&=null&=null&=null&=null&=SHubham&=Marc &=3MS Mobile&=null&=Marc &=null&=null&=null&=null&=Marc &=Marc &=Marc &=null&=null&=null&=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=gonna beat 3ms mobile&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=gonna beat 3ms mobile&= &=AdvaitaTheBanana&=AdvaitaTheBanana&=AdvaitaTheBanana&=AdvaitaTheBanana&=null&=AdvaitaTheBanana&=AdvaitaTheBanana&=AdvaitaTheBanana&=AdvaitaTheBanana&=AdvaitaTheBanana&=null&=null&=null&=null&=AdvaitaTheBanana&=AdvaitaTheBanana&=null&=null&=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=AdvaitaTheBanana&=null&=AdvaitaTheBanana&=null&=AdvaitaTheBanana&=null&=null&=AdvaitaTheBanana&= &= &=null&=null&=null&=null&=null&=lmao&=lmao&=Agastya&=Marc &= &=Marc &=Marc &=Marc &=Marc &=Marc &=Agastya&=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=gonna beat 3ms mobile&=gonna beat 3ms mobile&=null&=null&=null&=null&=null&=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &= &= &=Marc &= &=Marc &=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&= &= &= &= &=null&=null&=gonna beat 3ms mobile&=null&=null&=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=Agastya&=ur mom&=Agastya&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=Marc &=Marc &=Marc &=gonna beat 3ms mobile&=ur mom&=ur mom&=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=Marc &=Marc &=Marc &=Marc &=Marc &=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&= &=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&= &= &= &= &=SHubham&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=Marc &=Marc &=gonna beat 3ms mobile&=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=Marc &=null&= &=Marc &=Marc &=Marc &=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=Marc &=Marc &=null&=null&= &= &=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=null&=null&=Marc &=Marc &=Marc &=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=null&= &= &= &= &= &= &= &=null&=null&=null&=null&=null&=Marc &=Marc &=null&=Marc &=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=null&=null&=null&=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&= &= &= &= &= &= &= &= &= &= &=gonna beat 3ms mobile&=null&=null&=gonna beat 3ms moblie&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=ur mom&=ur mom&=ur mom&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&= &= &= &= &= &= &= &= &= &= &= &= &= &= &= &=null&=null&=null&=gonna beat 3ms mobile&=Marc &=null&=null&=null&= &= &= &= &= &= &=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=gonna beat 3ms mobile&= &= &= &= &= &= &= &= &= &=skparab1 on school mac&=skparab1 on school mac&=skparab1 on school mac&=skparab1 on school mac&=skparab1 on school mac&=skparab1 on school mac&=skparab1 on school mac&=skparab1 on school mac&=skparab1 on school mac&=skparab1 on school mac&= &= &= &= &= &=Agastya Pawate&=Agastya Pawate&=Agastya Pawate&=Agastya Pawate&=Agastya Pawate&=Agastya Pawate&=null&=null&=null&=null&= &=null&=null&=null&=null&=null&=null&=null&=null&=null&= &= &= &= &= &= &= &= &= &= &= &= &= &=null&=null&=null&= &= &=null&=Marc &=Marc &=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=gonna beat 3ms mobile&=gonna beat 3ms mobile&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=null&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=null&=ritam&=ritam&=ritam&=ritam&= &= &= &= &= &= &= &= &=gonna beat 3ms mobile&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=ur mom&=gonna beat 3ms mobile&=stop censoring me&=ur mom&=null&=null&=null&=null&=null&=ritam&=ritam&=ritam&=ritam&=null&=null&=null&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&= &=null&=null&=null&=null&=gonna beat 3ms mobile&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=null&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&= &= &= &= &=ritam&=ritam&=ritam&=gonna beat 3ms mobile&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=ritam&=Agastya Pawate&=Agastya Pawate&=null&=null&=ritam&=ritam&=ritam&=null&=null&=null&=null&=null&=null&=ritam&=ritam&=null&=null&=null&=stop censoring me&=null&=null&=null&=moorhsoom_peehs&=moorhsoom_peehs&=moorhsoom_peehs&=moorhsoom_peehs&=moorhsoom_peehs&=moorhsoom_peehs&= &= &= &= &=moorhsoom_peehs&=moorhsoom_peehs&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=null&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&=peehs_moorhsoom&= &= &= &=skparab1&=skparab1&=skparab1&=skparab1&=seneca&=seneca&=seneca&=seneca&=seneca&=seneca&=seneca&=seneca&=null&=null&=null&=null&=null&=null&=null&=null&=null&=&=null&=ur mom&=ur mom&=null&=ritam&=Skparab1&=null&=null&=null&=null&=null&=null&=null&= &=null&=null&=null&=c0ckgr1nder69420&=c0ckgr1nder69420&=stop censoring me&=stop censoring me&=stop censoring me&=null&=null&=null&=null&=null&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=stop censoring me&=null&=null&=null&=null&=null&=null&= &= &=null&=null&=null&=null&=null&=null" 6 | }, 7 | { 8 | "scores": "&=7&t18.071&=14&t48.762&=17&t72.832&=20&t50.251&=1&t1.338&=12&t23.317&=2&t5.062&=9&t19.437&=7&t19.949&=22&t65.686&=8&t18.495&=14&t23.605&=23&t52.915&=24&t64.638&=35&t131.128&=1&t12.19&=5&t17.107&=19&t41.671&=17&t36.268&=14&t24.421&=33&t136.615&=4&t9.7&=38&t214.25&=18&t97.8&=6&t12.461&=16&t62.833&=18&t57.263&=6&t16.771&=6&t12.992&=9&t21.752&=2&t7.637&=3&t6.07&=6&t10.703&=5&t18.655&=9&t29.5&=2&t12.59&=3&t5.975&=1&t2.877&=3&t14.8&=5&t13.6&=1&t2.771&=2&t9.673&=6&t12.779&=17&t54.7&=12&t58.225&=2&t7.609&=8&t14.628&=2&t6.214&=4&t10.88&=58&t379.013&=40&t159.602&=8&t37.8&=12&t51.8&=18&t49.796&=26&t65.537&=14&t29.583&=1&t1.979&=14&t26.601&=1&t4.693&=5&t10.362&=6&t13.177&=18&t65.701&=3&t13.528&=34&t164.441&=14&t45.599&=22&t80.014&=3&t14.991&=4&t8.7&=9&t28.4&=9&t26.6&=19&t57.6&=6&t17.6&=7&t25.1&=5&t20.9&=12&t48.4&=14&t44.2&=10&t22.3&=6&t13.296&=19&t83.3&=6&t22.1&=6&t11.017&=5&t18.1&=15&t48.1&=21&t105.1&=16&t87.3&=11&t38.4&=11&t34.4&=14&t51.3&=3&t8.9&=27&t107.252&=19&t105.047&=1&t4.161&=1&t5.1&=37&t177.18&=1&t9.688&=5&t10.217&=1&t1.451&=2&t6.57&=8&t16.699&=9&t19.088&=22&t57.909&=3&t8.238&=8&t25.5&=20&t76.5&=1&t3.263&=5&t8.823&=7&t25.153&=25&t85.19&=15&t49.806&=16&t54.324&=4&t8.546&=35&t186.309&=3&t24.334&=1&t5.805&=6&t30.62&=6&t15.787&=1&t9.611&=2&t14.399&=1&t4.536&=4&t7.811&=2&t4.917&=12&t42.609&=2&t8.2&=31&t120.746&=1&t3.803&=6&t10.489&=11&t27.14&=13&t27.914&=13&t25.587&=4&t23.418&=6&t13.912&=22&t62.884&=11&t22.474&=19&t47.49&=2&t9.11&=7&t26.784&=5&t12.054&=7&t25.099&=5&t21.731&=8&t16.522&=14&t40.729&=5&t12.062&=2&t6.29&=15&t43.126&=8&t29.738&=1&t5.425&=13&t36.699&=4&t6.159&=2&t8.634&=15&t40.434&=9&t39.876&=3&t6.363&=1&t4.379&=8&t13.681&=44&t160.419&=13&t34.7&=19&t45.725&=1&t7.596&=5&t13.377&=6&t28.298&=6&t20.375&=6&t22.283&=12&t39.224&=16&t71.027&=3&t18.574&=2&t4.432&=11&t47.197&=5&t10.68&=2&t4.161&=11&t19.995&=23&t54.231&=1&t2.078&=1&t2.158&=7&t17.899&=3&t7.581&=11&t26.287&=1&t6.604&=1&t3.142&=10&t23.245&=13&t32.738&=8&t18.71&=6&t13.119&=19&t48.263&=1&t3.278&=2&t1.609&=12&t44.335&=18&t79.395&=6&t18.058&=6&t17.214&=28&t88.647&=9&t21.226&=15&t49.7&=1&t3.979&=5&t11.321&=2&t9.053&=10&t31.372&=5&t19.462&=21&t67.695&=24&t75.201&=19&t72.407&=24&t73.398&=12&t25.358&=11&t25.55&=4&t14.184&=3&t5.729&=10&t24.344&=1&t4.175&=1&t5.924&=14&t30.774&=2&t3.66&=27&t74.332&=6&t15.157&=19&t53.511&=21&t72.2&=11&t25.466&=9&t22.228&=4&t8.074&=4&t11.75&=26&t81.461&=19&t47.518&=1&t0.579&=7&t15.391&=15&t31.315&=18&t44.087&=6&t16.74&=16&t36.229&=28&t104.81&=8&t21.031&=5&t12.658&=10&t25.364&=8&t15.394&=1&t3.925&=4&t8.587&=10&t25.825&=16&t45.353&=7&t16.112&=24&t65.218&=15&t33.636&=22&t66.418&=9&t21.933&=3&t8.751&=17&t47.338&=35&t111.094&=7&t16.111&=6&t14.824&=20&t68.222&=9&t19.656&=3&t6.867&=20&t47.62&=22&t52.459&=1&t2.756&=28&t77.635&=2&t2.932&=35&t127.191&=14&t41.689&=4&t10.237&=13&t36.196&=3&t6.195&=29&t79.367&=8&t22.175&=3&t11.855&=12&t42.173&=1&t1.569&=1&t4.786&=1&t3.942&=12&t32.866&=1&t2.864&=1&t6.277&=4&t7.262&=1&t3.42&=3&t9.496&=8&t26.985&=4&t13.559&=8&t22.193&=6&t21.738&=9&t18.08&=13&t45.259&=7&t30.036&=18&t64.043&=2&t11.32&=3&t13.481&=2&t19.727&=1&t3.051&=7&t20.982&=5&t17.063&=12&t30.891&=2&t11.587&=6&t27.857&=14&t50.967&=14&t44.126&=7&t18.889&=13&t45.488&=16&t52.795&=1&t5.938&=3&t5.17&=6&t15.862&=10&t28.676&=13&t26.837&=6&t22.983&=9&t20.847&=1&t3.279&=12&t57.28&=14&t36.091&=9&t29.233&=1&t2.667&=4&t8.426&=4&t15.567&=8&t13.337&=2&t12.094&=11&t46.947&=9&t34.303&=2&t8.775&=9&t11.187&=10&t21.045&=18&t56.985&=1&t1.017&=18&t45.239&=2&t14.7&=2&t6.8&=1&t10.8&=3&t6.4&=1&t3.1&=3&t13.6&=1&t6.3&=2&t11.1&=2&t6&=3&t9.4&=3&t5.6&=2&t19.2&=1&t4&=1&t4.9&=3&t11&=4&t13.8&=1&t1.6&=3&t22&=5&t24.8&=2&t26.7&=2&t11.6&=1&t0.5&=3&t11.1&=2&t6.3&=2&t12&=2&t6.8&=4&t20.1&=1&t3.1&=1&t1.9&=3&t16.9&=1&t3.4&=1&t1.108&=2&t11.9&=1&t1.9&=2&t16.6&=1&t11&=2&t3.6&=1&t1.9&=1&t8.5&=1&t2.7&=1&t5.6&=7&t16.445&=1&t4.677&=1&t2.598&=4&t5.699&=8&t17.059&=1&t1&=1&t2.9&=1&t1.1&=3&t13.6&=3&t13.5&=13&t58.892&=2&t7.128&=1&t2.453&=8&t17.546&=1&t0.689&=1&t3.49&=1&t1.375&=1&t2.609&=1&t1.203&=2&t3.554&=10&t35.331&=8&t14.257&=4&t7.881&=3&t11.719&=13&t26.146&=5&t8.813&=2&t5.422&=5&t15.578&=11&t38.324&=9&t37.257&=8&t24.9&=2&t4.922&=1&t3.692&=7&t19.887&=4&t10.926&=13&t23.318&=7&t13.084&=4&t19.486&=22&t63.941&=7&t22.305&=1&t1.964&=1&t6.013&=6&t23.437&=2&t6.413&=1&t3.051&=12&t31.828&=6&t16.364&=2&t5.089&=1&t4.937&=9&t19.145&=7&t22.825&=9&t20.274&=2&t2.565&=6&t9.955&=22&t75.089&=19&t70.882&=1&t4.444&=3&t10.847&=3&t7.488&=2&t5.409&=1&t7.112&=15&t40.084&=8&t11.168&=2&t4.797&=13&t47.647&=5&t19.687&=1&t2.486&=4&t6.346&=6&t12.865&=1&t3.473&=9&t21.528&=12&t38.547&=17&t63.51&=10&t36.38&=17&t74.892&=14&t56.826&=23&t97.404&=20&t99.968&=8&t18.566&=9&t25.627&=14&t38.865&=9&t21.159&=13&t29.153&=11&t26.192&=8&t17.157&=3&t11.583&=10&t18.262&=4&t9.509&=2&t4.752&=9&t20.89&=6&t13.685&=6&t14.548&=14&t36.278&=2&t4.913&=6&t16.761&=12&t40.649&=2&t10.525&=4&t14.083&=5&t13.732&=11&t32.593&=20&t94.845&=5&t14.317&=2&t8.796&=22&t62.953&=6&t10.96&=4&t6.712&=11&t33.791&=3&t7.683&=11&t27.521&=1&t7.085&=11&t21.451&=6&t12.16&=1&t5.142&=5&t20.743&=16&t74.309&=11&t27.279&=9&t19.582&=8&t16.95&=5&t13.122&=14&t36.203&=1&t2.135&=15&t44.866&=20&t63.707&=4&t9.19&=2&t7.297&=6&t17.616&=10&t33.149&=11&t28.032&=5&t10.26&=13&t36.353&=2&t3.895&=7&t16.953&=8&t22.05&=7&t12.158&=13&t37.32&=5&t9.259&=5&t9.94&=10&t18.957&=11&t38.681&=8&t18.501&=4&t7.512&=2&t14.179&=17&t58.465&=7&t16.78&=1&t3.39&=9&t42.077&=15&t36.132&=9&t30.521&=5&t8.516&=6&t15.267&=1&t3.682&=5&t8.763&=19&t74.77&=5&t13.212&=11&t37.78&=2&t7.152&=5&t12.088&=7&t14.319&=14&t51.922&=2&t6.122&=5&t7.844&=8&t29.238&=16&t49.332&=7&t16.71&=4&t9.192&=11&t34.027&=19&t56.218&=6&t8.396&=1&t10.557&=2&t15.195&=3&t7.649&=3&t9.915&=14&t27.373&=6&t9.882&=9&t25.04&=12&t25.047&=6&t13.86&=5&t12.277&=1&t2.296&=3&t4.754&=9&t23.992&=13&t32.8&=1&t3.035&=10&t22.265&=11&t35.291&=21&t77.535&=12&t43.709&=13&t41.057&=5&t9.611&=4&t12.105&=5&t8.269&=6&t15.062&=6&t13.231&=8&t16.108&=5&t13.264&=3&t7.366&=2&t6.457&=2&t12.879&=4&t7.246&=14&t57.567&=16&t71.201&=7&t18.539&=6&t26.906&=1&t2.936&=2&t4.719&=3&t4.165&=10&t44.05&=1&t5.056&=4&t5.559&=11&t41.979&=7&t16.58&=8&t16.398&=14&t38.399&=5&t17.826&=9&t23.432&=3&t12.449&=9&t45.989&=10&t30.903&=2&t6.381&=11&t43.671&=4&t12.574&=8&t36.253&=12&t30.268&=6&t12.898&=14&t44.966&=10&t21.04&=11&t27.005&=4&t10.94&=8&t21.855&=2&t6.609&=1&t6.177&=15&t47.657&=12&t26.86&=12&t25.343&=14&t62.824&=4&t7.054&=2&t4.494&=21&t118.88&=2&t6.34&=1&t1.319&=4&t14.722&=6&t12.19&=7&t20.803&=2&t10.248&=1&t3.765&=1&t1.659&=3&t8.329&=2&t4.059&=2&t8.047&=8&t18.862&=1&t2.834&=3&t9.747&=2&t3.991&=8&t16.354&=2&t7.667&=15&t36.609&=10&t21.793&=2&t7.198&=5&t12.676&=2&t2.934&=16&t42.857&=2&t7.71&=3&t9.512&=4&t9.853&=8&t13.294&=1&t4.205&=1&t12.268&=15&t52.107&=5&t15.356&=13&t44.825&=8&t21.545&=1&t6.278&=16&t45.341&=9&t16.92&=7&t17.52&=6&t20.523&=1&t3.553&=1&t1.681&=10&t32.834&=7&t19.771&=4&t7.896&=9&t24.682&=13&t52.012&=6&t20.891&=6&t18.425&=4&t6.009&=9&t18.671&=4&t6.81&=5&t18.252&=18&t44.976&=8&t27.992&=9&t20.633&=9&t22.112&=1&t9.755&=14&t28.347&=10&t27.077&=3&t7.449&=16&t31.879&=5&t6.805&=9&t16.516&=23&t57.869&=5&t32.747&=2&t3.655&=2&t4.27&=5&t22.328&=8&t35.444&=8&t30.868&=6&t20.758&=2&t9.155&=1&t1.88&=3&t13.466&=1&t10.765&=1&t1.76&=6&t21.779&=10&t26.49&=1&t2.266&=3&t13.274&=1&t5.332&=9&t38.371&=3&t5.744&=7&t17.119&=3&t9.605&=2&t5.831&=1&t3.801&=1&t6.504&=2&t4.977&=1&t2.436&=1&t2.159&=7&t12.052&=4&t13.336&=7&t18.353&=1&t6.316&=7&t17.447&=3&t8.92&=2&t10.067&=5&t11.732&=3&t4.256&=3&t6.921&=1&t1.808&=8&t26.938&=1&t4.231&=8&t17.683&=1&t3.747&=1&t3.76&=1&t4.188&=3&t9.7&=5&t13.088&=1&t0.204&=12&t28.008&=19&t65.602&=1&t3.81&=12&t30.199&=2&t6.694&=7&t11.367&=11&t23.552&=15&t41.028&=2&t9.048&=3&t5.257&=17&t40.456&=6&t9.982&=7&t12.792&=5&t14.766&=10&t27.076&=20&t64.852&=6&t15.43&=12&t24.805&=7&t17.165&=2&t11.007&=5&t29.056&=13&t36.002&=5&t10.361&=7&t19.396&=4&t10.076&=17&t73.567&=19&t68.054&=3&t5.581&=15&t38.362&=11&t19.338&=1&t5.373&=11&t23.888&=8&t21.002&=14&t31.302&=4&t7.144&=25&t80.681&=9&t20.615&=9&t32.419&=9&t20.063&=15&t59.132&=24&t125.59&=4&t7.333&=1&t3.792&=4&t6.965&=37&t211.395&=13&t38.902&=9&t14.513&=20&t66.851&=23&t127.595&=6&t14.545&=5&t8.635&=28&t133.27&=3&t4.38&=21&t85.949&=6&t12.224&=3&t4.611&=28&t137.779&=8&t24.948&=17&t80.882&=5&t13.043&=7&t13.238&=24&t96.986&=11&t24.47&=11&t15.25&=7&t18.164&=18&t63.256&=8&t16.916&=3&t8.154&=8&t16.147&=8&t17.714&=6&t20.926&=2&t7.383&=2&t4.152&=6&t14.307&=9&t25.933&=7&t20.613&=1&t3.586&=15&t50.176&=15&t49.526&=1&t4.617&=7&t17.529&=3&t4.575&=1&t5.556&=6&t11.681&=6&t12.742&=20&t68.496&=2&t7.528&=1&t8.308&=14&t40.181&=4&t12.918&=1&t2.103&=2&t14.201&=1&t7.171&=2&t11.701&=18&t80.546&=29&t128.299&=18&t41.973&=39&t292.232&=1&t4.814&=7&t15.84&=2&t10.94&=24&t95.269&=14&t47.069&=9&t25.701&=25&t111.488&=8&t27.474&=22&t111.095&=6&t8.942&=9&t22.397&=3&t6.006&=19&t68.232&=6&t8.679&=16&t81.917&=18&t98.899&=7&t20.895&=3&t12.073&=8&t13.054&=7&t19.639&=13&t25.249&=4&t5.127&=11&t25.419&=21&t78.83&=23&t171.774&=2&t6.626&=21&t69.562&=11&t25.604&=15&t34.01&=9&t22.556&=3&t9.178&=21&t70.325&=19&t49.046&=22&t59.788&=9&t21.198&=5&t9.356&=1&t1.45&=2&t2.009&=5&t9.648&=14&t54.801&=6&t21.165&=1&t0.588&=10&t16.928&=3&t9.162&=2&t4.786&=27&t146.979&=46&t430.165&=13&t46.714&=15&t43.373&=9&t27.021&=5&t12.629&=2&t6.155&=26&t90.151&=24&t104.286&=11&t31.812&=12&t32.493&=4&t12.01&=17&t78.241&=18&t58.559&=29&t144.185&=29&t74.745&=2&t8.376&=8&t33.777&=25&t73.15&=3&t27.509&=11&t18.345&=14&t30.279&=28&t89.996&=5&t20.769&=1&t4.815&=1&t6.545&=1&t1.243&=3&t9.829&=2&t8.298&=2&t6.874&=11&t32.064&=1&t1.725&=5&t10.975&=2&t8.406&=1&t4.05&=6&t21.399&=1&t6.582&=2&t6.37&=11&t33.049&=4&t9.659&=4&t10.324&=6&t20.023&=2&t2.395&=3&t8.556&=3&t6.692&=5&t8.204&=15&t25.202&=10&t19.849&=7&t18.168&=17&t49.447&=15&t37.195&=10&t19.555&=7&t15.501&=2&t2.183&=14&t39.199&=9&t20.805&=1&t4.509&=5&t13.753&=12&t37.067&=7&t19.729&=4&t13.357&=4&t9.494&=10&t22.769&=14&t36.647&=10&t28.231&=2&t4.554&=12&t24.005&=1&t1.441&=1&t3.925&=9&t21.98&=14&t30.223&=10&t19.53&=1&t6.437&=12&t30.238&=2&t6.371&=16&t42.84&=5&t17.025&=9&t19.241&=1&t2.149&=9&t17.068&=12&t27.636&=15&t40.718&=10&t25.378&=22&t62.031&=13&t28.548&=14&t32.585&=10&t36.367&=8&t19.211&=3&t6.21&=14&t20.788&=27&t94.364&=1&t0.728&=2&t4.651&=4&t21.063&=2&t11.291&=7&t34.084&=2&t13.666&=2&t5.402&=1&t9.959&=1&t15.31&=3&t6.558&=5&t11.553&=2&t3.037&=8&t20.671&=17&t44.614&=14&t82.677&=14&t34.075&=3&t7.498&=4&t13.982&=2&t9.41&=2&t18.591&=11&t35.752&=5&t14.543&=12&t25.65&=12&t34.123&=10&t22.049&=2&t5.715&=10&t31.393&=30&t158.759&=10&t29.573&=13&t30.255&=1&t3.9&=9&t14.83&=1&t4.289&=1&t8.77&=1&t14.151&=3&t21.385&=1&t8.55&=2&t7.238&=10&t25.292&=22&t109.266&=39&t194.326&=22&t67.121&=26&t65.041&=7&t20.99&=3&t8.811&=2&t22.218&=4&t6.211&=3&t12.084&=4&t7.68&=5&t15.896&=6&t15.816&=2&t24.974&=3&t7.555&=7&t23.762&=3&t14.327&=2&t15.811&=2&t10.17&=2&t9.801" 9 | } 10 | ], 11 | "secondArray": [ 12 | { 13 | "secondId": "" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /fix-audio.md: -------------------------------------------------------------------------------- 1 | # How to allow audio 2 | 3 | ## Firefox (btw u shud use firefox) 4 | Screen Shot 2022-05-22 at 7 38 48 PM 5 | 6 | ## Safari 7 | Screen Shot 2022-05-22 at 7 40 34 PM 8 | Screen Shot 2022-05-24 at 7 54 22 PM 9 | 10 | ## Chrome (idk how else to do it) 11 | Screen Shot 2022-05-22 at 7 43 19 PM 12 | 13 | -------------------------------------------------------------------------------- /game.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Snake game 7 | 8 | 9 | 13 | 14 | 15 |
20 | 21 |

Snake game

22 | 23 |
24 |

Settings

25 |
26 |
27 | 32 |
33 |
34 |

Theme: Dark

35 |
36 |
37 |
38 |
39 |
40 |

Autopilot: Off

41 |
42 |
43 | 44 |
45 |
46 | 47 |
48 |
49 | 50 |
51 |
52 | 53 |
54 |


55 |
56 | 57 |


58 | 59 |
60 | 65 |
66 | 67 |
68 |
69 | 70 | 71 | 72 |
73 |

Audio controls

74 |
75 | 76 |
77 |
78 |
79 |

Volume:

80 |
81 |
82 | 83 |
84 |
85 |
86 | 87 | 88 | 89 |
90 |
91 | 92 |

Rip ur browser doesnt support canvas :(( u shud switch to a better browser...

93 | 94 |
95 |
96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 106 | 111 | 117 | 118 | 135 | 136 |
137 |

138 |
139 | 140 |
141 |

Welcome to Snake Game!

142 |

How to play:

143 |

1. Use Arrow keys or wasd to navigate the snake around

144 |

2. Eat all the apples and grow your snake

145 |

3. Don't crash into yourself or the wall

146 |
147 | 148 |
149 |
150 | 151 |
152 | 153 |
154 | 155 |
156 |

Contributers

157 |

Developers: Shubham Parab, Anindit Pati, Agastya Pawate, and Anish Lakkapragada

158 |

Design: Anindit Pati and Shubham Parab

159 |

Music: Advaita Guruprasad

160 |
161 | 162 |
163 |
164 | 165 |
166 |

Customize snake

167 |
168 | 169 | 170 |
171 |
172 | 173 | 174 |
175 |
176 | 177 | 178 | 179 | -------------------------------------------------------------------------------- /html-controller.js: -------------------------------------------------------------------------------- 1 | 2 | function left(){ 3 | waiter = 'left'; 4 | } 5 | function up(){ 6 | waiter = 'up'; 7 | } 8 | function down(){ 9 | waiter = 'down'; 10 | } 11 | function right(){ 12 | waiter = 'right'; 13 | } 14 | function togglemusic(){ 15 | if (audioElement.paused){ 16 | audioElement.play(); 17 | let audiobtn = document.getElementById("audiobtn"); 18 | audiobtn.textContent = "Pause Music"; 19 | } else { 20 | audioElement.pause(); 21 | let audiobtn = document.getElementById("audiobtn"); 22 | audiobtn.textContent = "Play Music"; 23 | } 24 | } 25 | function maketheme(id,clr){ 26 | let ab = document.getElementById(id); 27 | ab.style.color = clr; 28 | } 29 | function clrbtn(id,clr){ 30 | let ab = document.getElementById(id); 31 | ab.style.backgroundColor = clr; 32 | ab.style.borderColor = clr; 33 | } 34 | function clrbtn1(id,clr){ 35 | let ab = document.getElementById(id); 36 | ab.style.borderColor = clr; 37 | } 38 | function toggleautopilot(){ 39 | if (autopilot){ 40 | localStorage.setItem('autopilot',"false"); 41 | location.reload(); 42 | } else { 43 | localStorage.setItem('autopilot',"true"); 44 | location.reload(); 45 | } 46 | } 47 | function toggletheme(){ 48 | if (theme == "black" || theme == "rgb(0,0,0)"){ 49 | (async () => { 50 | let a = 0; 51 | while (a <= 255){ 52 | document.body.style.backgroundColor = 'rgb('+a+','+a+','+a+')'; 53 | theme = 'rgb('+a+','+a+','+a+')'; 54 | let setclr = 'rgb('+(255-a)+','+(255-a)+','+(255-a)+')'; 55 | maketheme('score',setclr); 56 | maketheme('best',setclr); 57 | maketheme('time',setclr); 58 | maketheme('display',setclr); 59 | maketheme('ap notif',setclr); 60 | maketheme('namedisplay',setclr); 61 | maketheme('header',setclr); 62 | maketheme('header1',setclr); 63 | maketheme('header2',setclr); 64 | maketheme('header3',setclr); 65 | maketheme('gc',setclr); 66 | maketheme('themedisp',setclr); 67 | maketheme('settings',setclr); 68 | clrbtn('playbtn1',theme); 69 | clrbtn('playbtn2',setclr); 70 | clrbtn('playbtn3',theme); 71 | clrbtn('playbtn4',setclr); 72 | clrbtn('playbtn5',setclr); 73 | clrbtn('playbtn6',setclr); 74 | 75 | a += 3; 76 | await sleep(2); 77 | } 78 | })(); 79 | let aa = document.getElementById('themedisp'); 80 | aa.innerHTML = "Theme: Light" 81 | } else { 82 | (async () => { 83 | let a = 255; 84 | while (a >= 0){ 85 | document.body.style.backgroundColor = 'rgb('+a+','+a+','+a+')'; 86 | theme = 'rgb('+a+','+a+','+a+')'; 87 | let setclr = 'rgb('+(255-a)+','+(255-a)+','+(255-a)+')'; 88 | maketheme('score',setclr); 89 | maketheme('best',setclr); 90 | maketheme('time',setclr); 91 | maketheme('display',setclr); 92 | maketheme('ap notif',setclr); 93 | maketheme('namedisplay',setclr); 94 | maketheme('header',setclr); 95 | maketheme('header1',setclr); 96 | maketheme('header2',setclr); 97 | maketheme('header3',setclr); 98 | maketheme('gc',setclr); 99 | maketheme('themedisp',setclr); 100 | maketheme('settings',setclr); 101 | clrbtn('playbtn1',theme); 102 | clrbtn1('playbtn2',setclr); 103 | clrbtn('playbtn3',theme); 104 | clrbtn1('playbtn4',setclr); 105 | clrbtn1('playbtn5',setclr); 106 | clrbtn1('playbtn6',setclr); 107 | a -= 3; 108 | await sleep(2); 109 | } 110 | })(); 111 | let aa = document.getElementById('themedisp'); 112 | aa.innerHTML = "Theme: Dark" 113 | } 114 | } -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Snake game 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /lb-short.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Snake game - Leaderboard 7 | 8 | 9 | 10 | 15 | 16 |

Snake game - Leaderboard top 20

17 | 18 |
19 |
20 |
21 |

Rank

22 |
23 |
24 |

Name

25 |
26 |
27 |

Score

28 |
29 |
30 |

Time

31 |
32 |
33 |

Rank score

34 |
35 |
36 |
37 | 38 | 39 | 40 |
41 |
42 |

Loading and sorting leaderboard data... This might take a few seconds, we have over 750 entries to sort

43 | 44 |
45 | 46 | 47 | -------------------------------------------------------------------------------- /leaderboard-controller-short.js: -------------------------------------------------------------------------------- 1 | (async () => { 2 | const data1 = await fetch("./data.json").then(r => r.json()); 3 | const data2 = await fetch("./data2.json").then(r => r.json()); 4 | 5 | var datanames = data1.data[0]; 6 | var datascores = data1.data[1]; 7 | var datanames2 = data2.data[0]; 8 | var datascores2 = data2.data[1]; 9 | 10 | datanames = JSON.stringify(datanames); 11 | datascores = JSON.stringify(datascores); 12 | datanames2 = JSON.stringify(datanames2); 13 | datascores2 = JSON.stringify(datascores2); 14 | 15 | datanames = datanames.replace('{"name":"',''); 16 | datanames = datanames.replace('"}',''); 17 | datascores = datascores.replace('{"scores":"',''); 18 | datascores = datascores.replace('"}',''); 19 | datanames2 = datanames2.replace('{"name":"',''); 20 | datanames2 = datanames2.replace('"}',''); 21 | datascores2 = datascores2.replace('{"scores":"',''); 22 | datascores2 = datascores2.replace('"}',''); 23 | 24 | 25 | while (datanames.includes('+')){ 26 | datanames = datanames.replace('+',' '); 27 | } 28 | while (datascores.includes('+')){ 29 | datascores = datascores.replace('+',' '); 30 | } 31 | while (datanames2.includes('+')){ 32 | datanames2 = datanames2.replace('+',' '); 33 | } 34 | while (datascores2.includes('+')){ 35 | datascores2 = datascores2.replace('+',' '); 36 | } 37 | 38 | datanames = datanames + datanames2; 39 | datascores = datascores + datascores2; 40 | 41 | datanames = datanames.replaceAll("Developers: Shubham Parab, Anindit Pati, and Agastya Pawate Design: Anindit Pati and Shubham Parab Music: Advaita Guruprasad",'Contributers(thats too long)'); 42 | 43 | var names = datanames.split('&='); 44 | var scores = datascores.split('&='); 45 | 46 | let ln = document.getElementById('loadnotif'); 47 | ln.textContent = "Loading and sorting leaderboard data... This might take a few seconds, we have "+names.length+" entries to sort"; 48 | 49 | console.log(names,scores); 50 | 51 | // names = ['Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy']; 52 | // scores = ['&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261']; 53 | let points = []; 54 | let times = []; 55 | let i = 0; 56 | while (i < scores.length){ 57 | points.push(scores[i].split('&t')[0].replace('&=','')); 58 | times.push(scores[i].split('&t')[1]); 59 | i += 1; 60 | } 61 | 62 | // now we need to order it properly 63 | var rankscores = []; 64 | i = 0; 65 | while (i < names.length){ 66 | rankscores.push(parseFloat(points[i])+parseFloat(times[i])/1000); 67 | i += 1; 68 | } 69 | 70 | var ranks = []; 71 | var subjlist = []; 72 | i = 0; 73 | while (i < rankscores.length){ 74 | subjlist.push(rankscores[i]); 75 | i += 1; 76 | } 77 | 78 | let ranker = 1; 79 | //console.log(subjlist); 80 | while (subjlist.length > 0){ 81 | let max = (subjlist.reduce(function(a, b) { 82 | return Math.max(a, b); 83 | }, -Infinity)); 84 | 85 | //console.log('max '+max); 86 | //console.log('index '+rankscores.indexOf(max)); 87 | //console.log('lst '+subjlist); 88 | ranks.push(rankscores.indexOf(max)); 89 | subjlist.splice(subjlist.indexOf(max),1); 90 | 91 | // add the div 92 | 93 | i = rankscores.indexOf(max); 94 | 95 | if ((rankscores[i] != 0 && points[i] != 0)){ 96 | let display = document.getElementById('leaderboard generated'); 97 | let bgclr; 98 | if (ranker == 1){ 99 | bgclr = "rgb(100,100,0)"; 100 | } else if (ranker == 2){ 101 | bgclr = "rgb(170,170,170)"; 102 | } else if (ranker == 3 ){ 103 | bgclr = "rgb(85,85,85)"; 104 | } else { 105 | bgclr = "black"; 106 | } 107 | 108 | //255*3 = 765 109 | 110 | 111 | display.innerHTML += ` 112 |

`+ points[i]+`

`; 113 | 114 | ranker += 1; 115 | } 116 | } 117 | 118 | //console.log(rankscores); 119 | //console.log(ranks); 120 | 121 | // i = 0; 122 | // while (i < names.length){ 123 | // let display = document.getElementById('leaderboard generated'); 124 | // display.innerHTML += ` 125 | //
126 | //
127 | //

Rank

128 | //
129 | //
130 | //

`+names[i]+`

131 | //
132 | //
133 | //

`+points[i]+`

134 | //
135 | //
136 | //

`+times[i]+`

137 | //
138 | //
139 | //

`+rankscores[i]+`

140 | //
141 | //
142 | //
`; 143 | // i += 1; 144 | // } 145 | 146 | })(); 147 | -------------------------------------------------------------------------------- /leaderboard-controller.js: -------------------------------------------------------------------------------- 1 | (async () => { 2 | const data1 = await fetch("./data.json").then(r => r.json()); 3 | const data2 = await fetch("./data2.json").then(r => r.json()); 4 | 5 | var datanames = data1.data[0]; 6 | var datascores = data1.data[1]; 7 | var datanames2 = data2.data[0]; 8 | var datascores2 = data2.data[1]; 9 | 10 | datanames = JSON.stringify(datanames); 11 | datascores = JSON.stringify(datascores); 12 | datanames2 = JSON.stringify(datanames2); 13 | datascores2 = JSON.stringify(datascores2); 14 | 15 | datanames = datanames.replace('{"name":"',''); 16 | datanames = datanames.replace('"}',''); 17 | datascores = datascores.replace('{"scores":"',''); 18 | datascores = datascores.replace('"}',''); 19 | datanames2 = datanames2.replace('{"name":"',''); 20 | datanames2 = datanames2.replace('"}',''); 21 | datascores2 = datascores2.replace('{"scores":"',''); 22 | datascores2 = datascores2.replace('"}',''); 23 | 24 | 25 | while (datanames.includes('+')){ 26 | datanames = datanames.replace('+',' '); 27 | } 28 | while (datascores.includes('+')){ 29 | datascores = datascores.replace('+',' '); 30 | } 31 | while (datanames2.includes('+')){ 32 | datanames2 = datanames2.replace('+',' '); 33 | } 34 | while (datascores2.includes('+')){ 35 | datascores2 = datascores2.replace('+',' '); 36 | } 37 | 38 | datanames = datanames + datanames2; 39 | datascores = datascores + datascores2; 40 | 41 | datanames = datanames.replaceAll("Developers: Shubham Parab, Anindit Pati, and Agastya Pawate Design: Anindit Pati and Shubham Parab Music: Advaita Guruprasad",'Contributers(thats too long)'); 42 | 43 | var names = datanames.split('&='); 44 | var scores = datascores.split('&='); 45 | 46 | let ln = document.getElementById('loadnotif'); 47 | ln.textContent = "Loading and sorting leaderboard data... This might take a few seconds, we have "+names.length+" entries to sort"; 48 | 49 | console.log(names,scores); 50 | 51 | //names = ['Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy','Shubham','skparab1','poisonfy']; 52 | //scores = ['&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261','&=8&t36.997','&=7&t18.458','&=2&t38.261']; 53 | let points = []; 54 | let times = []; 55 | let i = 0; 56 | while (i < scores.length){ 57 | points.push(scores[i].split('&t')[0].replace('&=','')); 58 | times.push(scores[i].split('&t')[1]); 59 | i += 1; 60 | } 61 | 62 | // now we need to order it properly 63 | var rankscores = []; 64 | i = 0; 65 | while (i < names.length){ 66 | rankscores.push(parseFloat(points[i])+parseFloat(times[i])/1000); 67 | i += 1; 68 | } 69 | 70 | var ranks = []; 71 | var subjlist = []; 72 | i = 0; 73 | while (i < rankscores.length){ 74 | subjlist.push(rankscores[i]); 75 | i += 1; 76 | } 77 | 78 | let ranker = 1; 79 | //console.log(subjlist); 80 | while (subjlist.length > 0){ 81 | let max = (subjlist.reduce(function(a, b) { 82 | return Math.max(a, b); 83 | }, -Infinity)); 84 | 85 | //console.log('max '+max); 86 | //console.log('index '+rankscores.indexOf(max)); 87 | //console.log('lst '+subjlist); 88 | ranks.push(rankscores.indexOf(max)); 89 | subjlist.splice(subjlist.indexOf(max),1); 90 | 91 | // add the div 92 | 93 | i = rankscores.indexOf(max); 94 | 95 | if ((rankscores[i] != 0 && points[i] != 0)){ 96 | let display = document.getElementById('leaderboard generated'); 97 | let bgclr; 98 | if (ranker == 1){ 99 | bgclr = "rgb(100,100,0)"; 100 | } else if (ranker == 2){ 101 | bgclr = "rgb(170,170,170)"; 102 | } else if (ranker == 3 ){ 103 | bgclr = "rgb(85,85,85)"; 104 | } else { 105 | bgclr = "black"; 106 | } 107 | 108 | //255*3 = 765 109 | 110 | if (ranker == 1){ 111 | const div = document.createElement('div'); 112 | div.innerHTML = ` 113 |
114 |
115 |

`+ranker+`

116 |
117 |
118 |

`+names[i].substring(0, 23)+`

119 |
120 |
121 |

`+points[i]+`

122 |
123 |
124 |

`+times[i]+`

125 |
126 |
127 |

`+rankscores[i]+`

128 |
129 |
130 |
`; 131 | display.appendChild(div); 132 | } else if (names[i] == ' ' || names[i] == ''){ 133 | const div = document.createElement('div'); 134 | div.innerHTML = ` 135 |
136 |
137 |

`+ranker+`

138 |
139 |
140 |

`+names[i].substring(0, 23)+`

141 |
142 |
143 |

`+points[i]+`

144 |
145 |
146 |

`+times[i]+`

147 |
148 |
149 |

`+rankscores[i]+`

150 |
151 |
152 |
`; 153 | display.appendChild(div); 154 | 155 | } else { 156 | const div = document.createElement('div'); 157 | div.innerHTML = `
158 |
159 |

`+ranker+`

160 |
161 |
162 |

`+names[i].substring(0, 23)+`

163 |
164 |
165 |

`+points[i]+`

166 |
167 |
168 |

`+times[i]+`

169 |
170 |
171 |

`+rankscores[i]+`

172 |
173 |
174 |
`; 175 | display.appendChild(div); 176 | 177 | } 178 | ranker += 1; 179 | } 180 | } 181 | 182 | //console.log(rankscores); 183 | //console.log(ranks); 184 | 185 | // i = 0; 186 | // while (i < names.length){ 187 | // let display = document.getElementById('leaderboard generated'); 188 | // display.innerHTML += ` 189 | //
190 | //
191 | //

Rank

192 | //
193 | //
194 | //

`+names[i]+`

195 | //
196 | //
197 | //

`+points[i]+`

198 | //
199 | //
200 | //

`+times[i]+`

201 | //
202 | //
203 | //

`+rankscores[i]+`

204 | //
205 | //
206 | //
`; 207 | // i += 1; 208 | // } 209 | 210 | const sleep = ms => new Promise(res => setTimeout(res, ms)); 211 | (async () => { 212 | let loader = document.getElementById('loader'); 213 | loader.style.display="none" 214 | let clr = -765; 215 | let dir = 'left'; 216 | while (true){ 217 | let d = document.getElementById("d1"); 218 | d.style.background = "linear-gradient(to right, rgb("+Math.abs(255-clr)+","+Math.abs(510-clr)+","+(Math.abs(765-clr)+Math.abs(0-clr))+"), rgb("+Math.abs(255-(clr+153))+","+Math.abs(510-(clr+153))+","+(Math.abs(765-(clr+153))+Math.abs(-255-(clr+153)))+")"; 219 | d = document.getElementById("d2"); 220 | d.style.background = "linear-gradient(to right, rgb("+Math.abs(255-(clr+153))+","+Math.abs(510-(clr+153))+","+(Math.abs(765-(clr+153))+Math.abs(0-(clr+153)))+"), rgb("+Math.abs(255-(clr+306))+","+Math.abs(510-(clr+306))+","+(Math.abs(765-(clr+306))+Math.abs(-255-(clr+306)))+")"; 221 | d = document.getElementById("d3"); 222 | d.style.background = "linear-gradient(to right, rgb("+Math.abs(255-(clr+306))+","+Math.abs(510-(clr+306))+","+(Math.abs(765-(clr+306))+Math.abs(0-(clr+306)))+"), rgb("+Math.abs(255-(clr+459))+","+Math.abs(510-(clr+459))+","+(Math.abs(765-(clr+459))+Math.abs(-255-(clr+459)))+")"; 223 | d = document.getElementById("d4"); 224 | d.style.background = "linear-gradient(to right, rgb("+Math.abs(255-(clr+459))+","+Math.abs(510-(clr+459))+","+(Math.abs(765-(clr+459))+Math.abs(0-(clr+459)))+"), rgb("+Math.abs(255-(clr+612))+","+Math.abs(510-(clr+612))+","+(Math.abs(765-(clr+612))+Math.abs(-255-(clr+612)))+")"; 225 | d = document.getElementById("d5"); 226 | d.style.background = "linear-gradient(to right, rgb("+Math.abs(255-(clr+612))+","+Math.abs(510-(clr+612))+","+(Math.abs(765-(clr+612))+Math.abs(0-(clr+612)))+"), rgb("+Math.abs(255-(clr+765))+","+Math.abs(510-(clr+765))+","+(Math.abs(765-(clr+765))+Math.abs(-255-(clr+765)))+")"; 227 | 228 | 229 | if (clr >= 765){ 230 | clr = -765; 231 | } 232 | clr += 0.5; 233 | await sleep(2); 234 | } 235 | })(); 236 | 237 | })(); -------------------------------------------------------------------------------- /leaderboard.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Snake game - Leaderboard 7 | 8 | 9 | 10 | 15 | 16 |

Snake game - Leaderboard

17 | 18 |
19 |
20 |
21 |

Rank

22 |
23 |
24 |

Name

25 |
26 |
27 |

Score

28 |
29 |
30 |

Time

31 |
32 |
33 |

Rank score

34 |
35 |
36 |
37 | 38 | 39 | 40 |
41 |
42 |

Loading and sorting leaderboard data... This might take a few seconds, we have over 750 entries to sort

43 | 44 |
45 | 46 | -------------------------------------------------------------------------------- /loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Skparab1/snake/9693eaeb56c8bdc5753da82366e8bb2d1532b433/loading.gif -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | body {background-color: rgb(0, 0, 0);} 2 | body { 3 | margin: 0; 4 | overflow-x: hidden; 5 | } 6 | 7 | 8 | h1{ 9 | color:rgb(255, 255, 255); 10 | } 11 | 12 | div.wrapper { 13 | width: 300px; 14 | height:300px; 15 | border:1px solid black; 16 | } 17 | 18 | input[type="text"] { 19 | display: block; 20 | margin : 0 auto; 21 | } 22 | 23 | ul { 24 | list-style-type: none; 25 | margin: 0; 26 | padding: 0; 27 | background-color: #555555; 28 | } 29 | li { 30 | display: inline; 31 | float: left; 32 | } 33 | li a { 34 | display: block; 35 | color: white; 36 | text-align: center; 37 | padding: 14px 16px; 38 | text-decoration: none; 39 | } 40 | 41 | li a:hover { 42 | background-color: #f78a41; 43 | } 44 | 45 | .switch { 46 | position: relative; 47 | display: inline-block; 48 | width: 60px; 49 | height: 34px; 50 | } 51 | 52 | .switch input { 53 | opacity: 0; 54 | width: 0; 55 | height: 0; 56 | } 57 | 58 | .slider { 59 | position: absolute; 60 | cursor: pointer; 61 | top: 0; 62 | left: 0; 63 | right: 0; 64 | bottom: 0; 65 | background-color: #FFFFFF; 66 | -webkit-transition: .4s; 67 | transition: .4s; 68 | } 69 | 70 | .slider:before { 71 | position: absolute; 72 | content: ""; 73 | height: 26px; 74 | width: 26px; 75 | left: 4px; 76 | bottom: 4px; 77 | background-color: lightgray; 78 | -webkit-transition: .4s; 79 | transition: .4s; 80 | } 81 | 82 | input:checked + .slider { 83 | background-color: gray; 84 | } 85 | 86 | input:focus + .slider { 87 | box-shadow: 0 0 1px gray; 88 | } 89 | 90 | input:checked + .slider:before { 91 | -webkit-transform: translateX(26px); 92 | -ms-transform: translateX(26px); 93 | transform: translateX(26px); 94 | } 95 | 96 | .slider.round { 97 | border-radius: 34px; 98 | } 99 | 100 | .slider.round:before { 101 | border-radius: 50%; 102 | } 103 | 104 | .center { 105 | margin: auto; 106 | width: 50%; 107 | border: 3px solid green; 108 | padding: 10px; 109 | } 110 | 111 | .game-key{ 112 | background-color: black; 113 | border: 2px solid white; 114 | color: white; 115 | height: 50px; 116 | padding: 10px 5px; 117 | text-align: center; 118 | width: 5%; 119 | display: inline-block; 120 | font-size: 14px; 121 | transition: all 0.2s ease-in-out; 122 | cursor: pointer; 123 | margin-bottom:0.5; 124 | } 125 | 126 | .game-key:hover{ 127 | background-color: white; 128 | border: 2px solid black; 129 | color: black; 130 | transition: all 0.1s ease-in-out; 131 | cursor: pointer; 132 | margin-bottom: 0.5; 133 | } 134 | 135 | .blank-key{ 136 | background-color: black; 137 | border: 2px solid black; 138 | height: 50px; 139 | text-align: center; 140 | width: 5%; 141 | display: inline-block; 142 | } 143 | 144 | .endgame-key{ 145 | background-color: rgb(0,100,0); 146 | border: 2px solid rgb(0,100,0); 147 | color: rgb(0,200,0); 148 | height: 50px; 149 | text-align: center; 150 | width: 100%; 151 | display: inline-block; 152 | font-size: 64px; 153 | transition: all 0.2s ease-in-out; 154 | cursor: pointer; 155 | margin-bottom: 50px; 156 | } 157 | 158 | .endgame-key:hover{ 159 | background-color: rgb(0,125,0); 160 | border-radius: 25px; 161 | text-emphasis-color: rgb(0,100,0); 162 | transition: all 0.1s ease-in-out; 163 | cursor: pointer; 164 | margin-bottom: 0.5; 165 | } 166 | 167 | .opener{ 168 | background-color: black; 169 | border-color: black; 170 | border-radius: 0px; 171 | border-width: 0px; 172 | position:absolute; 173 | top:0px; 174 | left:0px; 175 | height:1000px; 176 | width:4000px; 177 | } 178 | 179 | .opener:hover{ 180 | background-color: black; 181 | border-color: black; 182 | } 183 | 184 | h2{ 185 | color: white; 186 | } 187 | 188 | .fullwidth{ 189 | width: 100%; 190 | background-color: #AAAAAA; 191 | margin-left: 4%; 192 | margin-right: 4%; 193 | position: relative; 194 | } 195 | 196 | 197 | .mid-container{ 198 | width: 17.5%; 199 | float: left; 200 | text-align: center; 201 | border: 2px solid gray; 202 | border-left: 2px solid black; 203 | border-right: 2px solid black; 204 | } 205 | 206 | .center-container{ 207 | width: 18.5%; 208 | float: left; 209 | text-align: center; 210 | border: 2px solid gray; 211 | border-left: 2px solid black; 212 | } 213 | 214 | .left-container{ 215 | width: 8%; 216 | float: left; 217 | text-align: center; 218 | border: 2px solid gray; 219 | border-right: 2px solid black; 220 | } 221 | 222 | .right-container{ 223 | width: 30%; 224 | float: left; 225 | text-align: center; 226 | border: 2px solid grey; 227 | border-left: 2px solid black; 228 | border-right: 2px solid black; 229 | } 230 | 231 | .mid-container-header{ 232 | width: 17.5%; 233 | float: left; 234 | text-align: center; 235 | border: 2px solid white; 236 | border-left: 2px solid black; 237 | border-right: 2px solid black; 238 | } 239 | 240 | .center-container-header{ 241 | width: 18.5%; 242 | float: left; 243 | text-align: center; 244 | border: 2px solid white; 245 | border-left: 2px solid black; 246 | } 247 | 248 | .left-container-header{ 249 | width: 8%; 250 | float: left; 251 | text-align: center; 252 | border: 2px solid white; 253 | border-right: 2px solid black; 254 | } 255 | 256 | .right-container-header{ 257 | width: 30%; 258 | float: left; 259 | text-align: center; 260 | border: 2px solid white; 261 | border-left: 2px solid black; 262 | border-right: 2px solid black; 263 | } --------------------------------------------------------------------------------