📜 ⬆️ ⬇️

Seven iterations of naivety or as I and a half years wrote my debut game

imagination With the appearance of Dendy in my first class, the question of who I will become was no more than a few weeks myself - a programmer, of course. Long and stubbornly I went to this, despite the lack of computer science at school, worked as a technical support for the well-known registrar while studying at the institute, but a full life began only at the moment when they finally took me to write code somewhere.

Very soon, I realized that it was not enough to be a programmer working from call to call and receiving money for a card for this — all the most interesting things start when you decide without any architects, testers and team leaders to write and make something work. Desirable something fun and exciting. A game, for example.

Under the cut are the seven most obvious (as it seems to me now) rakes that unexpectedly got in my way, and therefore are capable of having a non-zero probability of getting in the way of anyone going expensive game development.

All my life I have been playing computer games. He started back in the days when about a dozen of them were placed on a single floppy 1.44 MB. I have never understood those who say that games are a departure from reality and a reason for excessive imagination about oneself about something that is not in reality. In my opinion, games are a training of concentration, stirring up a thirst for knowledge, a practice in resource management and a purposefulness simulator. It is not surprising that in the first grade I knew exactly who I would become - a programmer. And I became one.
')
During the last few years that I managed to work in my specialty, I met many interesting people. For some reason, most of the time I had two programmers sunk into the soul, not related to each other; both of them passionately dreamed of exploring mobile platforms, then writing their own applications. As they each honestly admitted later, neither one nor the other has ever played or played, they are not going to play, and generally find this occupation stupid, for kids. To my quite reasonable question (asked almost at the first meeting) what they are going to write, when they finally understand that they are ready to take on the development of their own project for mobile platforms, both have said without a shadow of a doubt: “games, of course.”

I also always dreamed of releasing my own game. And if someone told me 20 years ago that in the future it would not be necessary to have a holding company to do this, I would probably play less and do more.

Much time has passed since the advent of the mobile application market. But while I lived in the suburbs, I always had higher priority classes than studying these mobile platforms and issuing an application for at least one of them. At first, I saved up for a long time on the phone on android 'e, in parallel finishing my studies and not forgetting to play now in Starcraft II , then in Tropico 3 ; then the whole was absorbed by the developer’s work in various companies that had nothing to do with the mobile market, and the evenings always sat down for World Of Tanks . Then one day a miracle happened to my family, which we had long dreamed of - my wife, my six month old son, and I moved from the Moscow region to a Karelian village with a population of 3 thousand people, and began to work remotely. The freed up 4 hours of time spent earlier on the road, it was decided this time not to waste.

Concept


Of course, I decided to start with something simpler, so I chose playing cards for my venture - they are almost the ideal OOP simulator. By that time, I knew Java , but for some reason it turned me off from any C language, so it was decided to release the application for Android . Moreover, I didn't really trust the emulators, and my only physical device was HTC Explorer with android 2.3.3 on board and 20 MB of free memory.

Having rolled up my sleeves, I got into the market to watch and compare competitors' applications. I admit, my first impression was that all these games are made by my very comrades - people who are not interested in games. Well, or small desk where the director has a foreign income and so that the capital rotates, he decided to release applications, since it is now in the trend - he hired programmers and, consider, ready. With rare exceptions, all the games even looked like twin brothers in the screenshots - the same green background and the jaded pictures on the cards are exactly like the real ones.

I read dozens of articles in the Habré about how who wrote their debut games and noticed that most often the novice igrodel scenario looks like this: he (and in the short term - I) takes him some simple tic-tac-toe or naval battle of which in the market and so in bulk (yeah, the person who decided to make another card game said) does the same thing as everyone else, changing the colors to orange and light green (no one has this!), then post the application in market and suddenly discovers that his game is not needed by anyone. Igrodel is perplexed - he spent his strength, he didn’t sleep at night, he picked up colors and secretly even allowed himself several times before going to sleep, closing his eyes, thinking: “can it still fly up?” He is already in love with his game irrevocably and passionately be different?), I forgot that I wanted to release from the very beginning that it was simpler, without a claim to world domination.

At that moment I had absolutely nowhere to hurry, I quietly worked at my work, and decided to work on the project in the evenings and on weekends. I decided not to write “no simpler” prototypes, but to immediately make a game for which it would not be a shame, and which even if it does not take off, then in the future, dug up by the fans of my 10th / 79th / 133rd game, will immediately demonstrate the fact that I’ve been trying to do something special. It took me several weeks just to think about what would be to distinguish my card game from others. The decision, when I found it, turned out to be much simpler than one could imagine - I just decided to make a game that I would love to play (cap approves).

I downloaded a bunch of "Fools" and played well in them. It looked like this: A new game is starting. We put cards, we take cards, we put, we take, we put, we take, we try our best to win. Won - hooray! Lost - alas. Repeat to infinity.

Who played WoT knows that very quickly there the battle itself fades into the background, giving way to the game of pumping military equipment. The joy comes now not from the victory in the next battle (although it happens), but from the purchase of a new tank. Imagine for a second that all the tanks in this game are available from the very beginning and you can choose any. Interesting to play? I do not think.

So here - in the very same “Fool” for the sake of victory, I want to play only the first ten matches, then - I get bored. The conclusion is obvious: money must be given for victories. But where to spend this money is another question, which, by the way, has tormented me so far and to which I still find new and new answers.

You can let a person with this money buy new card shirts and new backgrounds for card hassles. Will it be interesting to play? Well, not as boring as “just like that,” but for the time being it does not pull on a hit.
And what if I don't like to play “Fool”, but “King”? Here it is!
I thought up to make a collection of card games in which for every victory you get coins and you can open new card games for these coins. Smell something already true. Moreover, the top collection of card games looks exactly like this, but there it’s necessary to open new games for real money.

Now it was necessary to determine the number and composition of games. At least for the first time, before launching the application.

"Fool", of course. This is the most common, the most, in my opinion, favorite game in our country. We in the village often spend the evening with friends for this game and a kettle of green tea.

"King", of course. In it, we also play sometimes. In addition, as a child, I went into this game under MS-DOS , competing with the heroes of Soyuzmultfilm (Vadim Vladimirovich, my respect).

There was another solitaire game in which I played — couldn't-play-about ten years ago on some foreign flash portal. It was called “Pyramid”, but the official rules of solitaire with this name disagree with the game that I played. In my game, you need to put a card from the pyramid older or lower in value by one on top of the current card in the deck, with the result that with a certain dexterity and luck you can take half a pyramid in one move. With that game ten years ago, by the way, there was one major problem: its logic was processed on the server side and therefore, after each press, the page was reloaded (now I have a suspicion that it was not a flash, it was some kind of jitter). This game terribly delayed me then, but it was also terribly annoying that so much time was wasted on one batch. I promised myself at that tender 17-year-old age to write myself the same one myself, but without brakes. And the gestalts, as is known, must be closed.

I began to actively read on the Internet a variety of materials on card games and the cards themselves. I picked up the themes of suits for men on the cards, tried to dig into the history of the cards themselves and understand why I am so ashamed to admit that I make a card game. I don’t know how much it’s just me, but in my opinion, card games are considered to be some kind of quite marginal fun inherent in not the most successful layers of our society. However, this is a little bit later.

After reading about the Fool in Wikipedia, I was delighted with the number of modifications to it (now the article has been edited, there are no more modifications, but there were 50 pieces, no less ). I decided that I should by all means make at least the most interesting to him. I looked for the Fool counterparts in the market, preferably with a bunch of Wikipedian modifications, but I found only one such Fool, and then there were modifications, firstly for the most part paid, and secondly it was possible to activate not more than one modification at a time . But to mix them together is the most interesting! Having rolled up my sleeves, I decided to select the most interesting rules (of which more than 20 turned out), and also did not fail to add my own ones, why be ashamed of something. It was planned to buy them, of course, also for the money won.

In general, I decided from the very beginning that I would not be like those who installed games on the pedestal of their own means of survival and therefore I have to take “100 lire for simple rain, 200 lire for heavy rain, 300 lire for rain with thunder and lightning. “After all, when a writer writes a book, he is the last thing to think about how he will monetize it, for him (as for me in this case, because I’m a writer, I’ve got a creative person, yes, reference) it is self-expression and creative impulse.
In such a situation, it would be possible to make the game completely free - without ads and in-app purchases, but in this case I would deprive myself of the pleasure of digging into the API of in-app purchases and inter-screen advertising, as well as avoiding the whole aspect of developing mobile games called “monetization” ". So I tried to keep the balance - it should be quite comfortable to play without Donat, but if someone suddenly wants to support the developer and buy something, I’m just glad. At the same time, in purchases there is no limit on functionality, only time savings.

One feature in the form of awards for victories is good, and two are even better. I did not deny myself the pleasure of dreaming about what else could be changed in card games so that I liked them more. I tried to get to the bottom of the fun of this intellectual fun and once, having played hundreds of games with friends in the village, I sat down to play at the table with my wife's grandmother living in Moscow. I was amazed how much the game was transformed. Instead of a warm and friendly atmosphere of tea drinking, there was some kind of rivalry, not for life, but for death, and every victory or loss was perceived literally as a triumph or an insult, respectively.

At that moment I realized that the card game is also, oddly enough, communication. There would be no such abundance of our evening gatherings if we did not dilute the fights with conversation and jokes, did not eat fruits in parallel and did not listen to any music. I immediately remembered Mario's Game Gallery and the Wild Board Games , where opponents commented aloud on a blackboard or table. What could be more pleasant than the cries of the victim, cornered?

Thanks to Mario, by the way, I remembered another most interesting game I played in his gallery - Go Fish! In Russian, this game is called "Chests" and in our country it is played a little differently. The essence of this fun, if anyone does not know, comes down to guessing that there are certain cards on the opponent’s hand. I guess - you get them yourself. No - your opponent's lineup. And while abroad just guess the meaning of the cards, we still need to name their number, color and color.

I decided that in my game the opponents would talk, commenting on what was happening at the table. This was no longer anybody and was drawn to a truly exceptional product. Now it is time to think up - who will be these opponents? I began to think about who they are usually - people playing cards. Professional card players. Retired. Shpana street. Students at the lecture. Aristocrats with cigarettes in the mouthpiece. Homeless on the bench in the park.
I would like the game to have the foul and gloomy spirit of an underground institution, near-martial style like in the board game “ Overboard ”. And I also wanted an apt and catchy name for my game, almost a trademark; a name for which I would not be ashamed, and which I could pronounce with pride. And after several days of tormenting thoughts, I found him - "The Card House".

The scope of this undertaking caused skepticism among those to whom I tried to describe it in a few words. After all, if this is not in the market, then it is not so easy to do, is not it? "Yes, you will write your game for years," they told me. - "Throw halfway." All these concerns for me and my venture could be understood. I myself just had to repeat myself that I have nowhere to hurry, that I have a siege tactic, that I don’t quit my job for the sake of it, I just decided to replace the nightclub pots with the development.

The first iteration of naivety: no graphics


The first iteration of naivety was with the first version of the game, which took about two to three weeks. I worked on the project in my free time from work and household chores, and in the conditions so far only studying the platform, the work was completely barely. Well, if in the evening I managed to make at least one complete game function.

Incidentally, I do not know how to draw. At all. Going into details, explaining how bad everything is, I don’t see the point, because I’m looking at it - many programmers have this trait. So I decided that I would write a clean functional, and then screw up the graphics. The cards in my hand became my list of buttons in the form of LinearLayout , and everything that happens - TextView with a brief description of the moves made.

I understand that this is utter nonsense and it is unlikely that anyone will ever have the sense to do the same - anyone understands that it is necessary to draw at least gray pictures. On the other hand, if I had such an idea in my head, then there is a non-zero probability that the same thing will happen with someone else. Here is my advice to people like me a year and a half ago: do not do that. You will have to alter the entire control module, catching where the user clicked and determining what he wanted to say. You will have to enter delays between input processing and the execution of the corresponding response to wait for the end of the animation, which you do not have now. Given that all this will have to do, tearing and stitching up the ready code, believe me, this will be painful.

I was lucky to realize this early enough and not to redo pieces of already existing code, but simply to erase everything and start anew at that moment when I realized that in the process of attacking I should be given the opportunity to walk with several cards. Any solution in this situation in the conditions of maps in the form of buttons would be doomed - it would not go into the final release, but it would take time.

The second iteration of naivety: I will do everything perfectly, and controversial - I will make it into settings


This iteration actually combined two of my naive points of view. What they have in common is that both errors are described in the book “A mental hospital in the hands of patients” by Alan Cooper. Therefore, the most general advice would be - read books on developmental and developmental topics. Many and many mistakes that you make or intend to make have been discovered by someone a long time ago; all you need to do is pick up a book and let this person warn you. In addition, this is a great entertainment - to listen to those who understand your trembling hands and sleepless nights in an attempt to create a masterpiece.

However, first things first.

I did not get involved with android- templates, but decided to do everything on a clean canvas , by dividing the program into two streams, the control stream and the rendering stream, respectively. I can explain my choice by the fact that I dreamed (and never got to) to introduce visual distortions in the game, and for such an approach the standard application markup, as it seemed to me, didn’t fit.

When the third time I finally started to get something, I drew an empty card and began to display its color and meaning on it. My success has turned my head. I decided to by all means do everything so that people would gasp at the convenience and ideality of my game. By that time, I had never had any Apple device in my hands, but I heard from several people that everything was amazingly comfortable and organic there. Deciding to make things no worse (and even secretly dreaming that people will move from the bourgeois Apple to Android just for the sake of my game (ha ha, ha)), I decided that I didn’t need any “Take” or “Bit” buttons . Simply pull the cards on the table towards yourself or to the side, respectively.

I tried to make the game as realistic as possible - I even thought to make the loser shuffle the deck with his hands and deal out the cards, but decided to put it off until later. But what I really did was that the cards were put in any place on the table. As a result, of course, a situation arose when later cards lay on top of those already beaten. I’ve been debugging the mechanism for prohibiting this action for a long time, but realizing that sooner or later the computer could still accidentally do this (in the event that the two immediately throw up the cards by selecting the same final coordinates of the animation), I added the ability to click on any card, why she emerged under whatever number of cards are no longer.

It took me a lot of time for such little significant things - about two months. I tried to bring the simplest "Fool" to a state of ideality before moving on, although there was still a lot of work ahead. From this, the code of the class responsible for drawing and the code of the controller of the player also grew.

Later, I read about this feature of programmers at Cooper. He writes that if there is even a tiny chance that an event will occur, programmers always take the time to do something for this situation. Even if the probability of an event is one to one hundred million and it is nothing more than a soft inconvenience, and the time it takes two weeks to develop a code specifically for this case, the developers still strive to cover all events that have a nonzero probability.

This, of course, is another stupidity on my part - short-sighted and stubborn uproarness. Considering that I still had to screw up a whole bunch of modifications to the “Fool” control panel, it was necessary to focus primarily on these modes, and only then on some particular and rare cases of control and rendering. My approach contradicted including the Pareto law, which calls (in my free interpretation) to focus first of all on the most important aspects. As McConnell said in the “Perfect Code”: “The sculptor always first creates the rough shape of the future sculpture, and only then takes it to the details. Accepting first of all the details, you risk either throwing out the code that you have worked for longer than needed, or - worse, leave the bad code in the project, having regretted it, because you have been working on it ”.

Could my users play “Fool”, if their bottom cards were sometimes closed by the upper ones? We could. And could they play the game I had planned if there were no modifications of the Fool? No, could not.

Therefore, my third advice to myself and others like me (cap is proud of me): focus on the main thing, it’s never too late to change the little things. If you are afraid to forget about this feature or feature - write yourself somewhere.

Here, in this same iteration, I will set up my terrible habit, which I have almost already got rid of - in all controversial issues, provide the user with a choice in the settings. In my case, everything is still worse, because I interpreted any bifurcation in the interpretation of modifications as a new rule.

So, for example, in Podkidniy, attacking cards on the table must first be attacked, but if there is nothing more to report to it, the other players report clockwise and in strict order. In life, I saw completely different conditions - the cards were put on the table everything, not observing any queues. Who had time, he ate. Which option is better? Yes, both! This is how the “Flush” appeared and its submodification - “Soviet” (when the strict sequence is observed when throwing up). However, this is not the worst case.

Most of all, I am ashamed of the “Empty” “Fool” (cards are taken from the deck only if there are no cards left) and its submodification is “Fake” (cards are taken as soon as they are finished). I just could not decide how best and could not find anywhere information about at what point the cards are issued - immediately after finishing them in hand or at the end of the turn. “Ok,” I decided. - Divide into two versions. Shame and shame.

I later read about it from Cooper. He argues that developers are inclined to make any controversial issue in the settings, but this is a fundamentally wrong position - if the creator of the program cannot decide which way is best, then the user will definitely not decide this question.

And I was once again convinced of this when I recently discovered that in classic 2048, in the settings it turns out you can select the 5x5 field. Frankly, I usually climb in the settings in any game. But in mobile applications, everything is so fast, so often you take the phone for some five minutes while waiting for something that is not up to the settings. Therefore, developers who do not know how to do better, and decide to do so and so, and the choice to provide in the settings, here is my appeal to you: you still make this choice, choosing the default state. It’s up to you to provide an alternative or not, but remember that most people will probably never get to the settings and the alternative.

The third iteration of naivety: I immediately took up the largest piece


Half a year has passed, I finished “Fool” with all 40 modifications and submodifications I have chosen for myself. The holiday began, and I spent all of it, debugging and bringing this cuttlefish to mind. At the same time, the accumulated fatigue made itself felt - sometimes, if I saw an error, I simply inserted another if if I didn’t go into the essence of what was wrong here, so I wanted to finish as soon as possible. By the time I was up to something and was going to have to release only one "Fool" with modifications.

By this time, the classes of "The Fool" had grown to incredible size, became shaky and piled up. I calculated that, taking into account all restrictions on combinations of modifications, the number of rule options is more than 11 billion combinations. Naturally, testing of all variants was out of the question. Therefore, the well-known paradigm “ok, here we are done, the rest will be caught in the testing phase” simply did not work. I had to speculate for each modification to sort out all the rest in my mind and think about where a collision might arise. I am sure that I didn’t catch absolutely everything, because I should have walked through all the combinations, when there are three, four, five, and so on modifications at the same time.

It should be noted that by the time the work on “Fool” was completed, the concept of this game at the global level had undergone significant changes. I began to talk about what could push a person to buy new modifications and came to the conclusion that nothing but a bonus to winning money. Here, of course, many may object to me that the natural engine is interest in the gameplay, not a prize, but starting to sort out modifications in my mind, I first went through those of them that increase the number of cards in the deck and concluded that for which I would not play with two decks for the same winning money. After all, earnings in this situation, divided by time, would decrease. Therefore, I tried to roughly estimate the increase not only in time, but also in complexity; somehow coped with thatso that the price of the modification corresponds to the increase in profit as a percentage and introduces these coefficients in raising earnings. However, in this situation, a difficulty has surfaced: I could not allow the player to include modifications bought once, because this would soon lead to a mess with all the rules at the same time and huge earnings. Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in "Fool" and in case of loss all activated rules were reset (later I found this approach too cruel and slightly changed the rules for disabling modifications during a loss, but these are such trifles to which we will not go down here) .However, in this situation, a difficulty has surfaced: I could not allow the player to include modifications bought once, because this would soon lead to a mess with all the rules at the same time and huge earnings. Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in "Fool" and in case of loss all activated rules were reset (later I found this approach too cruel and slightly changed the rules for disabling modifications during a loss, but these are such trifles to which we will not go down here) .However, in this situation, a difficulty has surfaced: I could not allow the player to include modifications bought once, because this would soon lead to a mess with all the rules at the same time and huge earnings. Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in "Fool" and in case of loss all activated rules were reset (later I found this approach too cruel and slightly changed the rules for disabling modifications during a loss, but these are such trifles to which we will not go down here) .Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in "Fool" and in case of loss all activated rules were reset (later I found this approach too cruel and slightly changed the rules for disabling modifications during a loss, but these are such trifles to which we will not go down here) .Therefore, as a limiter, I decided to introduce tokens. One token - one activated rule (provided that it is purchased). Tokens were issued one for each victory in "Fool" and in case of loss all activated rules were reset (later I found this approach too cruel and slightly changed the rules for disabling modifications during a loss, but these are such trifles to which we will not go down here) .

"Fool" is in its essence a game turned inside out regarding victory. Its essence is not to become the first out of the game, but to not remain a fool. And in theory, it would be advisable not to give anything to the person who left, but to fool a certain amount from a fool. But personally, I am in this situation, seeing that the case smells like fried, would just go out of the game, avoiding punishment every time. It would be possible to count the number of interrupted games and evaluate the degree of honesty of the player, but such an algorithm has a lot of holes: starting from errors in the system at which the game ends abruptly, and ending with the phone shutting down due to a dead battery or freeing up suddenly needed memory. Therefore, it was decided that the loser should not give anything to the remaining ones - to give coins and tokens.

With the purchase of modifications, everything was not so easy either. It was impossible - and I understood it - just to give a linear list of modifications and allow to buy any. Otherwise, the person would have bought all the rules he was interested in, would have just scored for the rest, having studied their essence and speculatively playing the party in them. In addition, I have always been attracted to all sorts of development flowcharts. In this regard, the scheme of development of technology in WoT I always liked much more than a parallel scheme of buying levels and equipment in Hill Climb Racing . Therefore, I developed a scheme for the development of modifications, trying to unite the branches by subject and shove the most radical curvature of the rules of the game at the very end.

However, if with modifications everything was still all right, then with rivals, arenas and shirts it was obvious that no one would buy them. That is, there will be, but only after they explore all the changes in the rules affecting the game. I would at least do just that - at first the functional, then only the beauty. And if there was still some chance with rivals, after all these are new words that dilute the game, then with shirts and backgrounds the problem was more than obvious. Once would have climbed to see what the options are and never returned. Therefore, I introduced such a notion as “Lottery” and started playing the elements that are not essentially affecting the gameplay. "Lottery" appeared after a certain number of victories. So things appeared in my game,which it was impossible to simply buy for money - they could only be won through a long game.

After the third screen I developed, “Lottery”, I finally understood the main points that I used on each of the screens and wrote abstract classes that perform all the typical actions. The work on the Pyramid, the Trunks and the King went much faster - it took them all about 6 months of evening exercises. By that time, I myself podnabil hand, having developed an approach and solutions for typical tasks such as animation or switches of drawing modes. However, the system continued to offer surprises.

So for example, I was horrified to find at some point that the mechanism of animations and deferred execution was too heavy for me.
I immediately decided that checking whether the animated card flew in the drawing stream, and then wedging into the control flow and performing some logical action was wrong. Therefore, I did this - with the same time constant, I called up the animation and started the delayed action. This deferred action was inherited from my AsyncTask 'and in which onBackground performed the Thread.sleep () , and the onComplete - what I need to do.
I had about a dozen such deferred actions at any one time, the main consumers were, of course, opponents. They thought which card to go or which to throw; automatically, after each touch of the screen, they waited that this touch and the last half an hour would not happen, therefore they nervously glanced at the timer to start yelling from a certain moment: “Hey, where are you?”; at the same time, they followed up on what action the player had on the game stalled to shout, "Hey, beat the cards," or something like that. As a result, with an increase in the number of deferred actions (and opponents), the system simply began to terribly slow down, and even fell off altogether. It turned out that the Androids AsyncTask in his doInBackgroundIt really eats resources and this function is there for a reason; something needs to be stuffed into it — whether to receive data from a remote server or some kind of parallel computing, and not just an empty wait. Therefore, I rewrote the class inherited from AsyncTask , after which all performance problems disappeared:
public abstract class Action { protected int interval; // ,    private boolean cancelled = false; //    public Action(int interval) { this.interval = interval; } public void cancelTask() { this.cancelled = true; } public void execute() { new Handler().postDelayed(new Runnable() { @Override public void run() { if (!cancelled) { actionAction(); } } }, interval); } //   protected abstract void actionAction(); //      public abstract Action copyForDelayedExecute(); } 


However, I digress.

Obviously, I would start with the Pyramid, which was not supposed to be any modifications, and I would have had a lot of experience in writing the engine from beginning to end. You look, and the architecture of "Fool" would not be so dirty. I would have managed to learn a lot of new things about how to write the system, and in which case I could easily rewrite the Pyramid later. Starting from “The Fool”, I piled a bunch of inexperience mistakes in him, but still made him work, propped up on all sides with what he could and now was afraid to breathe on him.

Therefore, another rule, obtained by blood and sweat, for all who are just starting: among the large elements similar to each other, one must always begin with the smallest.

If I read this advice a year ago, I would say: “well, this is understandable, only now I want to deal with the heaviest elements first, in order to leave something simpler for later. Thus, when I finish with this large and extensive algorithm, there will be nothing to nothing but to the bitter end. ” That's the way it is, only with a non-twisted hand a ponderous and branched algorithm is written worse. “The Fool and the Pyramid in this sequence in total I wrote for almost a year. If I had started with the Pyramids, the total term would have been just some 7-8 months.

In addition, taking on the most difficult from the very beginning, there is a chance to simply retreat, unable to cope. And it will be much worse than after having already partially created the code, stumble upon an insurmountable obstacle. The accomplishments accomplished by that moment will push to the search for a compromise, while the lack of success behind your back can make your hands simply fall.

The fourth iteration of naivety: polishing does not take much time


As soon as I managed to finish the last, fourth game, I hurried to announce to my family and friends that only a few weeks remained before the release. These friends, devoted to the fact that I write something, were very few, contrary to my habit of telling everyone about everything. I felt from the very beginning that I was going to the left and right about what I was going to do, I was losing my strength to do it. However, the closer was the release, the less I needed moral strength to complete. The project gained weight and, like a snowball, almost rolled out to release. He still had to push every evening, but the release was simply inevitable.

For fun, I decided not to get a haircut until the release of the game. Given the small size of the bald spot on my head, this decision was more than hasty. But I had a reason to talk with fellow villagers - every time they asked me when I had my hair cut, I said that when I let out my game. Most twisted his finger at his temple, but I did not care, I'm not without eccentricity.

Polishing the game took about two more months. During this time, the hair on my head managed to grow to such an extent that the sellers in the shops stood up to protect the goods when I entered the room. I looked like a bum. Head terribly itched especially in the heat, but this was a definite plus. More than once or twice I, wanting to send everything to hell and go to bed, saw my shadow or scratch my already ugly hairy head and sat down to program, drinking coffee, because I understood that there was no one else to finish my offspring. And the sooner the release would have happened - the faster I cut my hair.

Motivation is a separate topic. Many of my friends and acquaintances tell me that they could not do a project after work for a year and a half a day. I understand them, but I was lucky with the mental tricks that I pondered to successfully trick myself.

Let's start from the very beginning - the first thing I stopped playing games. At all. I did not start programming and there was not enough time for games, but I specifically stopped playing games. The effect was similar to a low-frequency dense hum in the air after turning off the speakers, who had just played something terribly bass. I really lacked entertainment in my life in the evenings. Moreover, every time when I wanted to sit down and play something, I told myself that here it was - the most interesting game in my life - the release of my own game. All this self-management, thinking through the architecture and meaning of the game, fighting bugs as a stream of endless quests. And over time, as it began to turn out, I really began to get involved in the development, it became my game. At the same time, like the difference between fatty fast food and light salad with boiled chicken, the games created pleasure here and now, leaving a bad aftertaste of doing nothing the next day, the development could at first not give so much quick pleasure, but all night long after that and the next day I felt yourself a hero. It was a far more subtle and long lasting happiness, of a higher order, if you will.

I forced myself to reduce all thoughts to my game. Probably sometime my psychoanalyst will kick his tongue and shake his head at this my venture, but I taught myself to always think only about my project, literally turned on it. If I saw expensive cars, I immediately told myself that I would have such ones, I just had to work a lot, and for starters, let out my own game. If I saw foreign countries, I told myself that I would definitely visit there, but only after I released my game and achieved something with it. If I saw people sitting tight, talking friendly about something, then I would convince myself that I would do this, but first my project.

Not a day without a line! It seems that this technique is called. True, I read about it quite recently on Habré, before that I felt it somehow myself. Its essence was that after one day of development, it was not so difficult to miss the next evening, but after a week of daily programming, the violation of this tradition seriously beats the psyche the next morning. The brain, accustomed to the same rails, habitually rolls into "I will do it too / get it when I release my game," then it recalls that yesterday nothing was done and a painful discharge from the brain to the brain occurs. In time, I began to be afraid not to get into the development in the evening. Because in this case the whole next day was terribly tormented by conscience and sick, rolling on its usual rails “first project”. Sometimes, when there was no strength at all in the evening, I just launched Idea (in which I adapted to write) and sat in front of her for a couple of minutes, then went to sleep. So two or three times I managed to deceive myself by avoiding punishment.

I very quickly stopped drinking altogether, realizing that I couldn’t really work out anything under its influence, and if I missed at least one evening of development for the morning, along with the hangover, I was in for a painful moral retribution. I tried to program early in the morning, getting up a few hours before the family, but then all day I was only thinking about my project, and not about work. This option did not suit me either.

Finally, the closer to release, the more clearly I realized that no one except me would roll this stone uphill. My wife helped me by drawing pictures, but I did all the main work myself and was very happy about it. Finally, I found my calling and felt out of place, because every day I moved a step forward; at the same time, my brain received a full spectrum of pleasure from solving emerging quests and developing a strategy for winning one or another innovation when entering it into the mechanics of the game.

In general, of course, I was lucky from the very beginning to tune in to the harbor of the huge rock with a pickaxe. Every day I did a tiny part of the whole huge project. At the same time, looking back at yesterday and looking into tomorrow, it seemed to me that I was marking time. However, in the perspective of several months, progress was visible. I was not in a hurry, did not strive to accomplish the feat every day at any cost. Silently and calmly, as a rice collector, slowly but surely, firmly in small steps moved forward.

Returning to this iteration of my naivety, I would like to note that no matter how well the framework and the main code are written, the completion of all sorts of small things will take much longer than you expect. Is always.

Fifth iteration of naivety: I thought a good product would sell itself


I tried to read a lot of materials for the future, including on promotion. He knew that press releases should be sent on the day the game was released. I also read about the fact that it is necessary to practice laying out materials on the game in advance, including in order to know the public’s response as early as possible and if that is the right time to change the course of development. However, all these materials seemed to me to be somehow not entirely consistent with our domestic realities.

After all, I understood that it simply does not make sense to release an English version of my game simultaneously with the Russian-language one. Abroad, they do not play "The Fool", and numerous frazochki of my heroes nullified attempts to translate the game on their own. I remember sitting down and writing a bunch of funny exclamations in a notebook for a couple of days. Then I, while only rewriting them into a file of text resources, spent the whole evening. I got about 20 thousand characters of pure text in the game - I can’t translate that myself, with my English.

At the same time, being my main consumer myself, I kept asking myself questions - would it be interesting for me to read about the game, which will be released in six months and which cannot be downloaded right now? Yes, I would have forgotten about it right there. A very eloquent comment was recently to one of the articles on gamedev on gamedev — a person, waiting for his game to be released, laid out a diagram of her architectural solution. The only comment left by him is: “Where is the game itself?” Such is the harsh reality - someone will look at Fallout 4 trailer with pleasure, shifting from one foot to the other in anticipation of release; The noname 'ov game, which is also not yet ready, everyone will point out not to notice how the nightingale does not overflow. If you are so lucky to be interested in someone with your game, drag it to the market, put the “Install” button in your face, until it changes its mind or until its mother calls for soup.

As for consumer comments and course changes, Henry Ford’s quotation is very appropriate: “If I asked people what they wanted, they would ask for a faster horse.”
In addition, one cannot hope that a person expressing his opinion and awaiting a developer’s response agrees that his proposal is inappropriate or spoils the general concept. Even the fact that his proposal was put in the queue, he did not really agree; here and now, since he has shared his thoughts with you.
They want Hill Climb Racing to change the cap and colors of cars; they want more money and it was easier to win. The karmic laws do not allow me to ignore an inappropriate sentence, leaving the question asked me hanging in the air. I don’t want to lie according to the same laws of morality, and therefore I think that it’s more interesting to get a response back to an already formed product, which in my case is a conceptual work rather than a project that works on the principle of “every whim downloaded, rated, and better bought something “.

For all the above reasons, no one but my wife knew about my game, its name and concept up to the release date itself. At the final stage, alexusPro connected and gave a heap of CPU, for which I quickly changed a couple of interface points, postponing the release for another week. And even to the fellow villagers who paid attention to my patles, I had to refuse to answer the question “what is the game about?”.

And now the X hour has arrived. I put this moment aside for the week ahead three times, realizing that in comparison with one and a half years, one more week is nothing. In one of the marketing articles, I read that Tuesday is a bad day to start, and Friday is the most. Therefore, if I did not have time for the current Friday, I suffered a launch for the week ahead. I understood how easy it is to screw everything up by releasing my project as a schoolboy, just to release it, with a crumpled end or an unfinished bug, and therefore every time my head itched, demanding release immediately, but I realized that everything was not done I told myself that, apparently, not this week and suffered a launch.

The first thing after the release I sent out the news that I released my project to friends and acquaintances in contact, in Skype and in hangouts . Personal messages, only to those who might be interested. To my surprise, of those who installed the application and did not say anything (and there were most of them), no one said it was bad, everyone really liked it. Three or four of them got stuck together in a solid core of testers and began to play methodically, throwing me errors or suggestions for improvement. They play my game until the present time (although the third week has already gone since the release), surprising me by this. Many people from those who, without hesitating, can say to a person in the face that he didn’t work, who have every right to do so and even inclined to it, for some reason also praised my game. Apparently, it turned out not so bad.

Many wrote to me that they were terribly (like me at one time) delayed by the "Pyramid". Of course, it was not without people who asked me what was in the instructions (yes, who reads them, then?) Simply because it is easier to call me than to figure it out for yourself. Very quickly, it was discovered that 5-6 common problems, such as an incomprehensible moment, with the lowering of tokens to activate the rules or attack with several cards at once. I tried to write out such things in a separate file and correct as soon as possible.

I don’t even talk about errors-errors. For about a year, ACRA was bolted to my game, so that I could not test the game at the computer and still monitor the stacktrace of errors. At the same time I learned from some of my friends and friends which apparatus.

With a total of 40 messages sent, I received about 20 installations.

I found in this article a table of resources where I should write about the fact that I had released the game. True, I was significantly restricted in using this list, since so far the game has been released only in Russia, Belarus and Kazakhstan. Nevertheless, it also gave a certain increase in the installations, although even here I managed to adjust. The fact is that I clicked on the cherish button “Publish” on Friday evening, June 5, and while Google approved my apk , indexed the game and started issuing it by search, it took 12-14 hours. That is, the game appeared in the market on Saturday morning. Naturally, at this moment, most people were already at their dachas, and therefore even my sluggish attempts to push the game on some android resources broke on the totally empty Runet. When Monday came, on the same trashbox , so much news was dumped right in the morning that my game was already on the third page, to which, of course, a rare bird would fly.

There are two resources that I would definitely recommend for publication: androidpit.ru and android4all.ru . And there, and there on the forums there is either a specialized section "Rate my application", or a section "Games", where you can write about your game. In sum, these two resources, keeping track of page views with the game, gave me about 200 (wow! Really, as many as 200?) Potential visitors - those who learned about the existence of my game.

I also guessed to post the game for two hours, to the gd ( gamedev ) section, where I was quickly doused with tar for the schedule (as without it) and puffed feathers at me. Nevertheless, there were those who liked the game.

And ... everything. About 300 people know about the existence of my game at the moment, 500 - maximum. At the same time I have about 150 installations, of which about 60 are active. PF, you say? Well, yes, not thousands of installations. But for me personally, the thought that about 40 completely unfamiliar people set up my game for themselves and have not yet erased it seems to be a miracle somehow.

I can so easily predict the number of people who have seen my game at least once, simply because in the search, except for the query “Card House”, my application is not possible to find. Even in the “Collection of card games” I am below the 120th place, what can we say about the “Fool” or even more so “King”. What did I want with 100-500 installations? Well, if I may, I would like my “collection of card games” to be in the top ten for this request, since there are not so many collections of card games in the market. And, by the way, if you type "Collection of card games" with quotes (that is, to search for the whole phrase, and not individual words), then I really enter the first 10k.

Since you asked, I would also like the installation in the market could not be bought, moving up the list in the search is not the most successful games. But this is optional, someone for sure this state of affairs seems quite honest. After all, if typical entrepreneurs are forced to invest in premises, employees and equipment, why did I decide that there is such an area in the world where money and popularity are made out of thin air using a computer and a head?

So here's my next tip, do with it what you want: do not think that someone needs your application. Seriously. Many of those who are now reading these lines, like me and a half years ago, think: "I have a special application, which has no analogues in the market."Unfortunately, Google has not yet invented such a checkmark as the “unique application”, and therefore your work will most likely be searched through a search. So, my friends, even if you came up with an excellent converter of the size of tights to the number of kilograms of potatoes that fit in them, and there are no analogues to your application in the market, before this, all your applications about tights will still be first potatoes, then about kilograms, then about dimensions, and only at the very end is your very application, which, I repeat, nobody needs.

I would also like to note here the following: I did not count on the rapid growth of installations, again choosing siege tactics. I know who my potential user is a mustache 40-year-old uncle who has just bought himself the first tablet and knows only Domino and Fool from the games. Unfortunately, at the moment he will not find my game in the market, contrary to what I have said to myself for all these years and a half, they say, the popularity of the application will slowly but surely grow.

Sixth iteration: I thought I would rest after the release of the game.


I know, I know, I read about it many times - with the release of the game, everything is just beginning. People start to comment, you need to edit the bugs, write articles, and develop the project, otherwise you will very soon fall out of the race, they will forget about you. There is no time to relax.

But for me personally, it was not even the case. For almost a year I fed myself with fairy tales that life would change when I released this project. That any installations will go and I can relax and at least once calmly ride a bike or play Mortal Kombatwithout a sharp burning sensation in my chest that I am wasting my time, while the project is standing still. I released the project and ... catharsis did not come. The game did not appear in the market instantly, so the moment of clicking "Publish" I can not recognize the fact. The moment of appearance in the market of the game is also because I did not have such that just the game was not in the market and now it appeared, and after a few hours the first review and the first hundred installs.

Sometimes it seems to me that it would be much easier for me if my friends and former colleagues said that everything is bad and worthless. If 10,000 people had learned about my game, 2 of them would have downloaded, which would have been a failure of the initial idea. Or if out of 1000 installs I would have 3 active, which would indicate that the game simply is no good by itself. The problem here is that nobody simply knows about my game. This at the same time does not allow me to calm down and not to touch the project at least for a week, and at the same time does not answer the most interesting question for me: “how?” The launch happened, but I do not feel relief.

The advice here is obvious: if you have been working on something for a long time and are about to graduate, and after graduation you would like to rest, then as soon as you are ready to press the “Publish” button, tell yourself “stop” and rest for a week, then start.

Unfortunately, this is not entirely honest advice, since I myself would not have followed him a month ago. I would say that I can no longer walk with this disgusting head of hair and should by all means graduate right now. Just kiddingI would say that I will not be able to touch the project this whole week, that if I decide to take a week off, I will test and finish this whole week, no rest will come out. Well, I would advise people with such an obsession to try to get rid of the computer physically for at least a couple of days and only then graduate. Forces, I promise, there will be much more when comments from friends are poured on and the installation schedule will crawl upwards. This is especially true if, unlike me, you will succeed with a thousand installs in the first 24 hours.

Seventh iteration of naivety: I too actively fed myself with illusions


This iteration, as they say, to be continued ... After all, I still continue to feed myself with illusions, as if the previous six pieces are not enough for me. For example, I continue to struggle to somehow convey to the general public the fact of the existence of my game, although it is obvious that the real state of affairs is not even a thousandth of the position I expected and dream of. Although this is already my problem - I dreamed up myself, I had to be more modest.
I was sure that everything would be somehow different for me than for others who talk about their experiences, that I had thought it all out and provided for everything. That I got something more than a change of colors for lime and orange. And what should I do is to finish the project, how can I at least some time live a full life, while he lives his life for some time. That I will have the perfect game without a single bitch and stumble. Finally, that after the release of the game, everything will become much easier, because all that will be needed is to advertise your application wherever I find it, and the installs at that time will increase.

On the other hand, I do not know what I would do without these illusions. If to be, then to be the best; a bad soldier who does not dream of becoming a general and all that. Perhaps it was the illusion that my exceptional product made me beat and beat it all the time. And, you know, I am pleased with the result. The post-graduation depression has almost come to an end, and it seems very soon I will again take up designing the project expansion and writing code for it, debugging, and equipping with new features, finally choosing a further development path. Well, in short, I'm telling you - six iterations are not enough for me.

Curious conversation that happened in my hangouts with alexusProon the second day after graduation, on Sunday, when no one had returned from summer houses. At that time, I had only about 25 installations, of which 24 were active, and despite attempts to publish in a bunch of sources, every day the installs grew only 2-3. I then told him (the history of the correspondence keeps this curious fact), that I would have 100 installs now and would grow 10 pieces every day, I would already be hard on the additions and develop the project in every possible way. I think this is the essence of human greed - no matter how many installations there are, there are always few of them. When I finally recovered from the blow of release and took up the planning, the first thing I read was all the correspondence with everyone and suddenly I discovered my own mischievous statement. It turned out to be so interesting that by the time it had been two weeks since I had not posted anything anywhere,while the installs did continue to grow, there were already 10 of them per day, the total number of them was 106.

Instead of conclusion


So, I have lost my waking life for half a year (if you blind together all the work segments), and as a result I received 9 ratings, about 150 installs and an article on the habr. Is it worth it? Damn it, it was worth a thousand times!

I learned how to design architecture, learned a lot about my dedication and ability to manage my time, read a bunch of books, shoveled an armful of resources on android, put the finished project in my portfolio, got my life out of it, so that everything seemed fine and just like some summer or dawn, as it usually happens here in the village.

I have realized myself. I now can not imagine how you can spend your free time on anything else other than development. I learned the taste of an hour-long walk in the fresh air with my family after several hours of intense fabrication in front of the monitor. I grew up not only in my own eyes, but also in the eyes of those from my environment who saw my game. I learned the joy of unpaid work just for fun and now I am going to rise after the crushing blow of fate in the form of a lack of interest in my application and rush into battle again.

This project turned out to be really the most interesting game in my life and, it seems, I went through its single player to the end, now I can only play online and wait for the sequel.

So with your permission, I still call it all a success story. And let those who have installs significantly more significantly laugh at me.

Source: https://habr.com/ru/post/261189/


All Articles