My main goal is to practice collaboration.
However, most group projects are beyond my skill level to contribute to.
I feel like I don't get anywhere programming alone.
That's the gist of it.
Well, no better way to fix that than to jump into a project!
My best advice for you, the advice that I wish I had received back when I was a wee lad starting out programming, is to break everything down into very small chunks and write all of them down in an organized way. For example, your summary of the game is a good start, but try breaking it down further. Take the game's layout:
The map will consist of 25 rows high by 7 seven squares, size 100*100 pixels. Row 1, square 4, holds john's house.
Row 25, square 4 will hold the gate. John's goal is to reach the gate, by building and fighting.On the way, John must fight imps, that spawn on newly created ground.
That's a great start. In programming terms, what does it mean? You have a 7x25 grid that has to contain information for what's inside each square, so you could start with an empty 6x24 array of strings and manually set [3,0] (aka the middle of the bottom row) to equal 'house' or something equally descriptive at the start of the game.
Then how are you going to convey that information? Well, you specified that each square is 100px on each side, so you could create a function that cycles through the array and places an image for each entry into the game world every 100 pixels in each direction (with 'house' having the picture of the house, ' ' being a blank square, etc).
Then, whenever John builds something, you can simply change one value in the array and the game will change the display to match (you can use something similar to the display function to check for things like collision or what have you).
Now you might have something like this (in Unity-specific-JavaScript-based pseudocode that won't actually work as-is):
var mapArray : String[,] = new String[6,24];
var houseImage : Texture2D;
function Start () {
mapArray[3,0] = "House";
}
function Update () {
DisplayMap();
}
function DisplayMap () {
for (var x = 0; x < 7; x++) {
for (var y = 0; y < 25; y++) {
if (mapArray[x,y] == "House") {
GUI.Box(Rect(x*100, y*100, 100, 100), houseImage); // creates a box starting at pixel x*100 and y*100 and extends 100 pixels in both directions, filling that area in with houseImage
}
}
}
}
Now you've got a very basic view of the game world to build off of! It gets easier the more you practice, you just gotta keep at it. There're a bunch of people better at programming than I am here who would be happy to help with individual problems as they come up.