Giter Site home page Giter Site logo

programming-school's Introduction

Java CI with Gradle

Programming school

Introduction

The purpose of this repo is to teach my kids to program. So I set them up with laptops and we all sit around the table.

There are directories for each child that allows them to keep their code isolated, but I am encouraging cross interaction. The purpose of this is to also teach them how to use editor and how to use github.

Note that the point of this is to have results, as in build a game, or draw something. The goal is NOT to teach kids specific operators or boolean algebra or sorting or something like that. They would all be very bored with that approach, I think. So the point of this is to throw them into the code at a higher level, where they can add few lines of code here and there to affect how their game works, rather than start from scratch with empty program and build something up from nothing. While I do think that skill is important, I think it's often a bit of an advanced topic these days, since most people start with some existing framework even in real-world projects.

Target audience

The target audience for this is a programmer parent. I am making no intention whatsoever to be able to teach kids who don't get some parental guidance. Programming is hard. Kids have questions. Without parents around, who understand programming, and have time to at least answer questions and get their hands dirty with a little bit of coding, not much progress will be made.

There is also an implicit assumption that the parent knows basic things like if clauses, syntax of expressions, basic operators, and such. These lessons are NOT intended to teach kids basics of language. The lessons are intended to keep them interested in creating a fun goal (draw something, build an adventure game), while it's expected of the parents to along the way teach them the basics. I believe every kid dies of boredom if someone will recite them all the boolean operators and make them learn than. But if they learn operators along the way, while using them through parental guidance, they might make progress.

Why java?

I believe java is a great introductory language. It's very explicit, so you have to type boilerplate code a lot, which I think is great for kids to see the structure fully, not deal with magic.

It is also possibly the most suitable language for frameworks. Large parts of these lessons is not just learning java, but also living within the framework. The entire series of adventure game lessons is basically lessons how to learn within framework and extend them with your own logic. And java is the most suitable language for this.

In several occasions, I had to rework the framework which caused API changes and brekages in kids code. It was a great lesson in how to live life as a real programmer, not just be isolated inside your simple test program.

Other options which I've considered and discarded:

  • node.js: JS is too unstructured for my mind, plus the asynchronous model of node engine is not for the faint-hearted. It's hard to learn node.js without dwelling into understanding how the engine actually works.
  • python: I personally dislike python for many reason (maybe because it reminds me of perl?), and it's also a bit hacky. I think strong-typing is a plus with teaching how to code.
  • C: in some way, I believe C is a great introductory language, but it's hard to be effective unless you learn basics of memory management and pointers, which are again something not for the faint-hearted.

Curriculum

This grows as it goes by, but the progression is as follows:

  • draw basic graphics: circles lines (this is using a simple java AWT Graphics primitives)
  • respond to basic key presses: similar than before, except allow ability to control what happens with clicks on the keyboard.
  • adventure game: allow kids to create a basic adventure game with places and things and creatures, with support for graphics and sound at a location.

Workstation Setup

Each student needs:

  • github account
  • laptop

Each laptop needs:

  • java 11
  • VS Code or Eclipse or some other IDE, use whatever you're most comfortable teaching your kids
  • git client either integrated into IDE or any other form that you're comfortable teaching your kids

Student setup

Each student should have his code under package programming.school.student.<UNIQUENAME> In order to bring a new student on-board, they should have their new package created, and then you can copy in all the programs from the package programming.school.reference. That will give them the boilerplace for all the lessons and they will be able to progress from there.

Each java class has a main() method, so it can be executed directly as a standalone program, typically via right-click "run" action in most IDEs. VSCode can do that. Eclipse can also do that.

programming-school's People

Contributors

jecimovic avatar mancason avatar neonscripter avatar tecimovic avatar

Watchers

 avatar  avatar  avatar  avatar

programming-school's Issues

feature "getting drunk"

if you buy "vodka" you can drink it and get "Drunk".
getting drunk on level 1: go the wrong direction.
level 2:do the wrong action (not die).
level 3: every couple actions you do turn into "die".
level 4: die immediately.

;)

Text Without Player Actions

You could add logic to some rooms in adventure games where text can pop up without players writing things.

Some of them could even come up randomly.

Key per door relates to properties

Now that the "key per door" thing was added, can you make a way for players to get passed a certain door if they have any item of a certain property?

Adventure Game Machines

If you add a machine to an adventure game, players can insert either objects, attributes, money, or multiple of them and get something out of it. (new rooms, objects, money, attributes, creatures, many things!)

An example of a machine is in a lab, there is a machine that gives you a robot pal if you insert a computer.

Close the game

I would like a command that closes the window and the whole game.

Randomly generating loot in chests

Chests don't just have certain items that can be spawned there, but you can also make them generate loot randomly, by imputing the possible items that can spawn.

quiz rooms

if you try to go to a quiz room you have to answer a question to go
for example:

Go North
What is 1+1
3?
unable to go North

or:

go south
what is 12*12
144?
correct.

proceed to south

:)

Key per door

Some rooms the player needs to carry a specific object to enter

For example:

A player can't enter the guinea pig room, but when the player carries a guinea pig, they can enter it.

Quiz Rooms 2

So here's how quiz rooms work I think:

  • You can decide how many questions there are and what the questions themselves are
  • The player answers the questions and if they get them right, something happens. If they get them wrong something else happens.

Here's how I was planning it to work in my game:

  • The ogre asks you different questions. If you get any of them wrong, he sends you to the previous room. If you get all of them right, you may proceed.
  • First, the ogre writes the question on your screen, and the correct answer is rightanswer. then the player answers. the player's answer is the same as rightanswer, it changes rightanswer to the new answer, then the player answers again, and so on, so on, so on, until the quiz finishes, and all the answers are right. Then the player may proceed to the next room.

Chests

Chests in rooms with stuff in. People can put things in and take things out. Things can be spawned in there before the game starts.

Museum donations

I have a museum in Washington DC in atwi80c and I would like if I were able to donate to it. You would just say "donate item" in rooms where this is turned on and it would appear so you cannot take it out in certain "art hall" rooms.

Object moving without player actions

Sometimes, objects should be able to move from one room to another without players messing with it, or if players are carrying it.

For example, a player is carrying a sandwich, but the giant monster is hungry, so the sandwich goes to the giant monster's house.

Another example is, a pearl lies on the floor undiscovered by the player, but the pearl monster likes it so he moves it to his den.

Title changing

I would like if you could change that little thing on top of the window that says "adventure game" in atwi80c and "cellular automata" in golgoal. Is that possible?

Combat system

Weapons, armor, way to kill creatures would be a good thing (in some ways it uhh... would not) BUT STILL. So if there was a way you could wear some certain objects as "armor" and equip other objects as "weapons" and creatures could be killed with weapons. Also some creatures would attack you, and if you wear armor, you don't take all the damage. Different weapons do different amount of damage and different armor protect you a certain amount. Also when you attack a creature, if their code says so they will fight back (you decide the amount of damage) and some of them don't attack at all.

max size window

when i need a 100x200 frame, it always starts giant, and even if it starts the right size, you can always expand it wich means that the rest of is is STILL THERE. so if i made a 100x100 coordinate plane in the corner, and i say to put a dot in the middle, it will place it out of frame. so please can we add a thing that has a "MAXIMUM/MINIMUM SIZE" so you cant make it any bigger/smaller, or "FIXED SIZE" wich doesnt allow you to change the size AT ALL.

timed actions

if you jump on a train track or something it sets a timer for 5 seconds. you have 5 seconds to do the actions there before you need to get out.

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.