GithubHelp home page GithubHelp logo

jsettlers / settlers-remake Goto Github PK

View Code? Open in Web Editor NEW
354.0 58.0 100.0 482.08 MB

A Remake of "The Settlers III" for Windows, Linux, Mac and Android

Home Page: http://www.settlers-android-clone.com

License: MIT License

Java 99.89% Python 0.02% Shell 0.04% GLSL 0.05%
game android settlers-iii java ai-players

settlers-remake's Introduction

For active fork as of 2022 see..

Active Fork: [https://github.com/paulwedeck/settlers-remake] which is forked by @paulwedeck

JSettlers Build Status

This project intends to create a remake of the famous strategy game "The Settlers 3" published by Blue Byte in 1998. The project is developed in Java and runs on PC (Windows/Linux), Mac and Android. More information can be found on the project's website at www.settlers-android-clone.com

Warning: Alpha Status

The game is currently in an alpha status! Therefore bugs, frequent changes making saved games invalid and server abortions need to be expected. Nevertheless we will try to minimize trouble.

Found a Bug? Report it!

If you experience troubles / find a bug, help us fix it. The JSettlers game creates log files of your games that are essential for debugging. Therefore always include the following information in a bug report:

  1. What OS and JRE are you using? If it is Android, please state your Android version.
  2. Revision of your build:
  3. In the PC/Mac version this can be found in the head of the window as "JSettlers - commit: XXXXXXX".
  4. In the Android version, the info is displayed on the start screen in the lower right corner as "build: XXXXXXX".
  5. In the game's folder, there is a subfolder resources/logs/ containing a folder of log files for every game you played. Please package the folder belonging to your game where you experienced the bug (identifiable by date and map name). This folder contains the following files:
  6. *_out.log: This is the console / debugging output of the game.
  7. *_replay.log: This file contains all game relevant actions you and other players did in the game (e.g. place a building, send soldiers somewhere). With this game, we can recalculate your game and debug it to find the exact source of your trouble.
  8. Specify the game time when you first experienced the bug (the game time can be found in the upper right corner while playing).
  9. If you were playing a custom map, please attach the map. Without it, replaying the game won't be possible.
  10. Describe what problem you experienced so that we can easily understand it.

Many thanks in advance for helping to improve this game!

Playing JSettlers

In order to play the game, you need to have the "GFX" and "SND" folders of the original version of "The Settlers 3" as obtained by installing the original "The Settlers 3" game (DEMO version also works).

Furthermore, you need an up to date installation of Java 1.7 or 1.8. The Java Runtime Environment (JRE) is needed to run JSettlers, as it is written in the programming language Java.

After that, follow the detailed installation instructions for you platform.

Windows, Linux, Mac OS

  1. Install "The Settlers III" or a demo version (Settlers III Amazons Demo) of it. Don't worry, if it is not running on your OS, we only need the graphics and sound files. In order to get them, you can also unzip the Amazons Demo exe file (yes: unzip the .exe) and copy the folders Gfx and Snd into an empty folder on your computer.
  2. Download the newest stable release of JSettlers*.zip / JSettlers*.tar.bz2 (this also includes the MapEditor).
  3. Unpack the downloaded archive to wherever you want JSettlers' installation to be.
  4. Run the "JSettlers.jar" file.
  5. On the first start, the game will ask you for the folder where you've installed / unziped (see step 1) the original Settlers III. Please select the respective folder and continue.
  6. Have fun and enjoy the game!
  7. Please have a look at the manual. The current state of the game lacks some controls known from the original, but also contains new ways to do things, which you shouldn't miss.

Arch Linux

  1. Install jsettlers-git from the AUR.
  2. Optionally: Install settlers3-demo-data if you don't own an original The Settlers III and select the following folder when the game asks you: /usr/share/jsettlers/s3
  3. You can start the game from the system-menu or with the commands "jsettlers" and "jsettlers-mapcreator".
  4. See instructions above

Configuration Flags

As described before, the game's UI is still lacking a lot of features. That's why we have to offer some configurations via an options file. You can find a default options.prp file aside the JSettlers.jar file after you unpacked the archive.

When opening the file, you will see several options that can be enabled by uncommenting them (remove the # at the beginning of the respective line). This is also described in the file.

Possible configurations include:

  • all-ai: Let all players be played by the AI. You will be able to watch all AI players and to "assist" them during the game.
  • fixed-ai-type=YYYYY: Option to specify an AI type that shall be used for all AI players. The default behavior is to use a the weakest AI type for the first player and increase the difficulty for every player. Possible values: ROMAN_VERY_EASY, ROMAN_EASY, ROMAN_HARD, ROMAN_VERY_HARD
  • disable-ai: If this flag is enabled, no AI players will be present in single player games.
  • locale: If you want to test a different localization than your systems default, it can be specify with this option. The value should look like: en_en.

Command line flags All the options above can also be specified as command line options. For this, you need to prepend every one of them with a double dash. Therefore the option fixed-ai-type=YYYYY should be specified as --fixed-ai-type=YYYYY.

Android

  1. Enable installation of Apps from "Unknown Sources".
  2. Copy the "GFX" and the "SND" folders of your original "The Settlers 3" installation into a folder called "JSettlers" on your device. The "JSettlers" folder must be located in the root directory of your internal storage (alongside folders like "Download" or "DCIM") or your external storage (e.g. memory card).
  3. Download the newest stable JSettlers-Android_v*.apk onto your Android device.
  4. Install JSettlers by running the downloaded file.

Build instructions and developer's guide

The build instructions and the developer's guide can be found in our wiki.

Getting in Touch

Besides the possibility to report bugs on Github you can also join our JSettlers Discord. Here you can discuss on development questions and find other players to meet with.

settlers-remake's People

Contributors

abledbody avatar aligator avatar andreas-eberle avatar andreasb242 avatar codingberlin avatar ewaldbenes avatar fantu avatar gollum1001 avatar homoroselaps avatar iridiumoxide avatar jkatzwinkel avatar maximilius avatar michaelzangl avatar nptr avatar numsim1415 avatar paulwedeck avatar payday1 avatar rpolzer avatar simulant87 avatar slaxvice86 avatar stumpdk avatar tehkain avatar tom-pratt avatar tomsoftware avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

settlers-remake's Issues

Settlers pathfinding

The Unit AI for builders and/or carrier starts to walk in tight circles if blocked by rocks never getting from and to target locations(leads to unfinished buildings).

Framerate cap?

A small suggestion, maybe overkill, or not possible:
Would it make any sense to make a frame rate cap on the game?
My Windows PC runs at 35, which give a smooth and fine experience, while my Andriod game runs at 51, which seems like too much, the ressources and battery drain taken into consideration.

By the way: Thank you so much for your great work! I'm looking forward to new releases, and to check out more of the source code.

Rework take / drop animation cycle

Current situation:

Movables can "take" or "drop" a material. During this process either the "TAKE" or "DROP" animation is played.

Problem with current solution

When taking or dropping something, the movable should do the following steps:

  • "bend down"
  • change the material type accordingly and
  • "raise up" again.

However, the current solution can only display a TAKE animaition or a DROP animation. To simulate the correct behavior, the current solution for building movables is to first do a DROP, change the material and then do a TAKE animation. However, in between these animations, the movable is shown with NO_ACTION, meaning standing upright. Furthermore, often there is no dedicated animation for "raise up", but it is simply the "bend down" animation played in the inverse order.

Suggested solution / Steps to go

(as disccussed with @michaelzangl )

  • The current actions "TAKE" and "DROP" need to be changed to "BEND_DOWN" and "RAISE_UP", as this is really what we need. Furthermore, the UI should implement any RAISE_UP animation as the inverse animation of the according "BEND_DOWN" animation.
  • The movable logic needs to be adapted to support a take/drop operation, which does the following:
    • play BEND_DOWN animation
    • update the material accordingly and place/take the material on/from the map
    • play RAISE_UP animation
  • The building scripts and the movables.txt file need to be adapted.

I will open a branch for this change and start with the part of the logic soon.

Builders stops carriers when building

When working on a building, the builders make the incomming carriers wait and queue up. This is especially an issue with larger buildings like Large Residence.
As far as I remember, in the original Settlers, the carriers could unload, while the builders were working.

NullPointerException in Background causes users of IGraphicsBackgroundListener to crash

Whenever the background is invalidated (for example on zooming), a call to Background.backgroundChangedAt(int,int) may crash due to a race condition by throwing a NullPointerException:

java.lang.NullPointerException
    at jsettlers.graphics.map.draw.Background.backgroundChangedAt(Background.java:1731)
    at jsettlers.logic.map.newGrid.landscape.LandscapeGrid.setLandscapeTypeAt(LandscapeGrid.java:127)
    at jsettlers.logic.map.newGrid.landscape.LandscapeGrid.flaten(LandscapeGrid.java:203)
    at jsettlers.logic.map.newGrid.landscape.LandscapeGrid.walkOn(LandscapeGrid.java:187)
    at jsettlers.logic.map.newGrid.movable.MovableGrid.movableEntered(MovableGrid.java:71)
    at jsettlers.logic.map.newGrid.MainGrid$MovablePathfinderGrid.enterPosition(MainGrid.java:1151)
    at jsettlers.logic.movable.Movable.initGoingSingleStep(Movable.java:273)
    at jsettlers.logic.movable.Movable.goSinglePathStep(Movable.java:264)
    at jsettlers.logic.movable.Movable.pathingAction(Movable.java:249)
    at jsettlers.logic.movable.Movable.timerEvent(Movable.java:214)
    at jsettlers.logic.timer.RescheduleTimer.timerEvent(RescheduleTimer.java:76)
    at jsettlers.network.synchronic.timer.ScheduledTimerable.checkExecution(ScheduledTimerable.java:35)
    at jsettlers.network.synchronic.timer.NetworkTimer.executeRun(NetworkTimer.java:142)
    at jsettlers.network.synchronic.timer.NetworkTimer.fastForward(NetworkTimer.java:220)
    at jsettlers.input.GuiInterface.action(GuiInterface.java:158)
    at jsettlers.graphics.map.MapInterfaceConnector$1.fireAction(MapInterfaceConnector.java:34)
    at jsettlers.graphics.action.ActionFirerer$ActionFirererThread.run(ActionFirerer.java:97)

The race condition happens between the UI thread and the thread running the central timer of the game logic.

Building selection state is not reset when movables are selected

When you select a building to construct in the menu, the building construction marks are displayed (red and green dots). When now selecting some movables, the building construction is not canceld, but the movables are selected and the list of selected movables is displayed.

Expected behaviour: The building creation should be canceld (so that the construction marks are removed) and the selected movables should be displayed (as before).

Can't get game to start

Windows 8.1
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode)

I downloaded 'JSettlers_v0.1.1-alpha.zip' and 'JSettlers_v0.1.1-alpha.tar.bz2'
I unzipped them into the same folder on my desktop 'C:\Users\xjohnson21\Desktop\Settlers'
I edited config.prp to say 'settlers-folder=C:\BlueByte\S3AmazonenDemo' This is where the game file is installed

I can't get JSettlers.jar to do anything.

Things I've tried:

Editing the Environment Variables for 'Java' and 'Path'

I'm not very good at this stuff so I don't know what else I can do

When a stack of material is picked up, a position protected by a building is unprotected.

Whenever a stack of material gets empty, it is removed from the MapObjects manager. When this is done, its position is unprotected (If there is no other stack on the same position). If the stack is from a producing building, that building's protected position of the stack is unprotected. However, the producing settler still puts the produced good there. This works until the position is blocked, e.g. by a forester. Normally the protected state would protect the position from beeing blocked.

Missing Animations

In the following I will list movables with missing animations. I will extend the list with further findings. Feel free to post you additions.

@michaelzangl: can you write a wiki post, explaining how animations can be found and added?

  • PIG_FARMER:
    • Taking
    • Dropping
    • WATER
    • CROP
    • PIG
  • SMITH
    • Taking
    • Dropping
  • BEARERS
    • Taking/Dropping
      • GOLD_ORE
      • COAL

Implement sync check for multiplayer

In multiplayer the game should check if the players are still in sync. This would prevent a later "manual" detection and therefore the loss of a lot of playing time. Furthermore, it would help to detect bugs that cause the asynchronism.

Suggested Implementation
All clients could regularly (all clients at the same game time) send a calculated pseudo random number of the game's random generator. If the game is in sync, these numbers are all equal. If the game is out of snyc, the numbers will differ immediately.

Movable animations with inverse order needed

Some movables, for example the farmer, do not have dedicated animations for taking and dropping materials. Therefore the take animation needs to be played in the inverse order to be used as drop animation.

If automatic locale search fails show english as default instead nothing

I did some test of build from master, I saw that automatically search locales, it loaded partial italian I did but don't show english for strings missed (for this probably I can found a workaround with transifex)
Another bigger problem if when not found rispective locales where don't show all strings, I think is good use english as default if not found locale.

jsettlers.common/gen is not refreshing

When doing a clean checkout and a new build, eclipse does not recognize that the gen directory was created. It only scans for updates of files inside that directory.

Workaround: Refresh jsettlers.commons manually and then rebuild.

Textures Map is not found/created

Starting SwingManagedJSettlers when you do not have a texturemap throws the following exception:

java.io.FileNotFoundException: D:\data\programming\java\programs\SettlersGit\jsettlers.main.swing\..\jsettlers.common\resources\images\texturemap (Das System kann die angegebene Datei nicht finden)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at jsettlers.graphics.swing.resources.SwingResourceProvider.getFile(SwingResourceProvider.java:23)
    at jsettlers.common.resources.ResourceManager.getFile(ResourceManager.java:29)
    at jsettlers.graphics.image.ImageIndexFile.load(ImageIndexFile.java:38)
    at jsettlers.graphics.image.ImageIndexFile.getImage(ImageIndexFile.java:22)
    at jsettlers.graphics.map.draw.ImageProvider.getDirectImage(ImageProvider.java:223)
    at jsettlers.graphics.map.draw.ImageProvider.getImage(ImageProvider.java:203)
    at jsettlers.graphics.utils.UIPanel.drawBackground(UIPanel.java:99)
    at jsettlers.graphics.utils.UIPanel.drawAt(UIPanel.java:83)
    at jsettlers.graphics.utils.UIPanel$ChildLink.drawAt(UIPanel.java:179)
    at jsettlers.graphics.utils.UIPanel.drawAt(UIPanel.java:89)
    at jsettlers.graphics.utils.UIPanel$ChildLink.drawAt(UIPanel.java:179)
    at jsettlers.graphics.utils.UIPanel.drawAt(UIPanel.java:89)
    at jsettlers.graphics.utils.UIPanel$ChildLink.drawAt(UIPanel.java:179)
    at jsettlers.graphics.utils.UIPanel.drawAt(UIPanel.java:89)
    at jsettlers.graphics.JSettlersScreen$PanelRegionContent.drawContent(JSettlersScreen.java:101)
    at go.graphics.region.Region.drawRegion(Region.java:96)
    at go.graphics.area.Area.drawRegionAt(Area.java:120)
    at go.graphics.area.Area.drawArea(Area.java:108)
    at go.graphics.swing.AreaContainer.draw(AreaContainer.java:149)
    at go.graphics.swing.AreaContainer$1.display(AreaContainer.java:81)
    at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:373)
    at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:358)
    at javax.media.opengl.awt.GLCanvas$7.run(GLCanvas.java:983)
    at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:655)
    at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:594)
    at javax.media.opengl.awt.GLCanvas$8.run(GLCanvas.java:996)
    at javax.media.opengl.Threading.invoke(Threading.java:193)
    at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:449)
    at javax.media.opengl.awt.GLCanvas.paint(GLCanvas.java:499)
    at javax.media.opengl.awt.GLCanvas.update(GLCanvas.java:688)
    at sun.awt.RepaintArea.updateComponent(RepaintArea.java:255)
    at sun.awt.RepaintArea.paint(RepaintArea.java:232)
    at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:347)
    at java.awt.Component.dispatchEventImpl(Component.java:4937)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Backslash in Properties file needs to be escaped.

JSettlers is not starting on Windows 8.1 Pro 64-bit (6.3, Build 9600). No logs created.

  1. Unpacked and installed JSettlers correctly.
  2. Installed S3-Version is from GoG.com (has both SND and GFX folders)
  3. Edited Settlers 3 Installation Path in config.prp (also tried encapsulating the path with " )

JRE-Version: 8.0_40 (both 64 and 32-bit)

Also tried to run it from the command prompt (admin and non-admin). Exception when running from command prompt:
Exception in thread "main" java.io.FileNotFoundException: config.prp (The system
cannot find the file specified)

Selecting an Open Source License

Currently our settlers-remake has no open source license yet. After having a look at the pros and cons of some licenses, @michaelzangl and I propose the MIT License.

@stumpdk @adamjryan @justangel: You already contributed to this project, so we want to ask you if that's ok for you, so that we can set the license. Can you please post your opinion in this ticket?

which encoding localization files?

encoding files in resources\localization folder? what program to edit and save?

game support the choice of localization? when editing a file labels_de.properties in the game is not displayed properly, and when you create a localization file, there is no choice of which file to use

small string error in english

I found a small string error in english:
big tmeple
that should be:
big temple

there are also other strings strange probably to improve

about translation project in trasifex probably can be good add a refer about it somewhere:
https://www.transifex.com/projects/p/settlers3-remake/
anyone can use it and should make easier and faster translation in any languages, from web, without programming experience, also with more people working on same translation in real time ecc...

Gold Smelter not producing Gold Ingots

Currently, the gold smelter is carrying the gold ore around the house to finally disappear inside with it. I don't wanna know what he's doing in there.

Minimap graphical error on fullscreen

if you use maximize window button on windows(64bit) in my case, the minimap gets dotted looks like it is skipping a few lines in the minimap, while if I scale the window manually(by dragging the window borders) to cover the entire screen it looks ok.
(this happens in both 1.0 and 1.1 release builds on any map)

Winery is not being built

Currently, a winery is not being built. Maybe even the ground is not being paved correctly? Tried several maps, not working for me. Console-output following (if there is any usable).

untitled-1

Update JOGL jars.

On Linux there can be trouble with the current version of the JOGL jars and on my Mac, I can only see artefacts of the graphics buffer showing flickering parts of other applications.

MapCreator.jar - save map problem

after created a map, set up the basic resources, put players Spawn points, then press "SAVE" and nothing happens.
When you click on "PLAY", the map editor does not respond

OS: win8.1x64

C:\WINDOWS\system32>java -version
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)

MapCreator.jar last version from master

Prefer platform-independent file paths

Hi, when running jsettlers directly under windows it fails finding the gfx and sound folder due to invalid path joining, see here. It creates a file paths which are looking like C\:\\...\\JSettlers/Gfx so the path contains invalid characters.

I'd recommend to use Paths.get() to join paths and return a Path[] array instead of a String[] array. E.g.:

result[resultIdx++] = Paths.get(settlersFolder[folderIdx], subfolders[subfolderIdx]);

This way you could replace these kind of checks against following generic file check:

hasSndDir = hasSndDir || Files.exists(sndFolder.resolve("Siedler3_00.dat"));

In case you need to get the File object due to some legacy code, you can get it via path.toFile(). But generally it's recommended to use the newer Path class over the legacy File class.

Movables sometimes get stuck

In this example, carriers sometimes get stuck between a building or build site and a stone resource object after for example delivering a resource for building. Unfortunately, this is very hard to reproduce. As far as i know, this has always been an issue on the original game as well, though there was no other solution as to delete the building or even restart the game (when settlers got stuck on the environment).

The issue can be resolved by converting the movable to a controllable one (like a pioneer) by then move it out of the way in either northern or southern direction.

Edit: also happens, when movables are staying inside the work area of a forester. Once the trees have grown, they won't come out.

untitled-1

use gradle for build?

Would you consider a PR to convert the build to gradle rather than ant?

That will allow use of other IDE and also give good integration with the new android developer tools that are gradle based.

Terrain Frustum problem.

I notice terrain becomes black at the bottom part of the screen when moving over mountains, this does not happen on flat ground level terrain, it looks like frustum culling problem to me, as if the tiles are outside frustum while they should be inside.
(this happens in both 1.0 and 1.1 release builds on any map)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.