• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.

patishi

Members
  • Content count

    92
  • Joined

  • Last visited

Community Reputation

212 Neutral

About patishi

  • Rank
    Member
  1. Thank a lot my friend!    very much appreciated
  2. Thanks a lot for the very detailed answer.  Boy! do I still have a lot of work to do :)         I remember that i first need to try and play the hash move, capture moves, killer moves etc..   first, before i am going to play the quiet moves.   But I (stupidly) was going to generate all the possible moves fist and only play them in that order.     Thank you for correcting me, now i know that there is no point in generating usless moves if i am not going to actually play them ( or at least not sure about that).
  3. I am now working on generating moves in chess.  I am writing move generation function for every piece (pawn,knight,bishop...)and i currently generation all possible moves without any kind of filtering.      I wonder what is the preffered way to assert that the king is not in check after the move is played (e.g if the move is valid).    The way i see it,  I have to actually play the move on the board and only than can I know that the king is not exposed or attacked.     But should I make this valiadation in the alpha-beta function (in the actual evaluation stage) ?   or maybe "artificialy"  make the move inside the moves generation function and decide if i should add it to the list in the first place.       Also,  can you give me some tips on how to improve the move generation ?  maybe not generate all possible moves?    Thx.
  4. Thank you very much my friend ! Very appreciated :)
  5. I was planning to loop through each piece in every direction and check for available moves until i hit the edge of the board.. but i guess that i can simply get the available squares by means of bit operations on the relevant bitboards?
  6. Thx for the responses. Alvaro, I read your comment but i'm having a little hard time to understand it completely. Let's say the white queen is on A8,now it can't move north anymore cause there is no more board left. I need to make some kind of validation.. If I try translate ir to bitboard terms, A8 is the 57th bit, and if I do <<8 I will get strange results. what am missing here?? Please bare with me , like you said..thinking OUTSIDE of the board requires a change in how you look at things. Thx
  7. I am currently starting to work on a chess engine. With padded array it is easy to check for offboard squares,  but what if I want to use bitboards to represent the board, how should I make this validation?      should I keep a padded array (along with the bitboards)  for those checks or there are maybe another more effiecient / bitboard oriented solutions ?   Thx
  8. Thanks!  I will explore this further 
  9. I am working on a little Gomoku engine, this project s mainly for learning and practicing in programming and the C language, and it is also fun I want to represent the board with Bit-Boards , so I can do pattern checking for the evalution function and checkWin function etc.    first thing,  because the board is huge (15x15), I need to hold more than one bit word for each player representing the board.     one idea I got from a forum member here is to have 15  16-bit words for each player,every word represents a row.  the board will look like this:   29   28   27   26   25   24 23 22 21 20 19 18 17 16 15  .... 14   13   12   11   10   9   8   7   6   5   4   3   2   1   0   But here comes my dillema.     let's say I want to check a certain row for a threat pattern that looks like this:   011110 (1E Hex, 30 Dec),  than i will go through every 6 bits in that row (and shift the row >> by 1 in every iteration) and with a & operation check if there is a match.   And I will do this for every threat pattern I want to check.    So far it sound good, and also pretty fast the way I see it.    But checking the rows is easy becuase I have them ready in bit sets.   but what about the columns and diagonals? (even harder then columns!)   How can check for a bit- pattern match if i don't have the columns and diagonals already in my disposal  (like the rows).  ?      The way i see it, I can "generate" a new 16 bit word each time I want to check for a certain column/diagonal, by means of starting from an empty number ( unsigned short y = 0) and than construct it one by one (with | operation or +...) by going through the rows at the right indexes.   and than, after i have a ready to go bit-word, i can again do the bit pattern checking to see if i have a threat someplace in that line.   just like i do for the rows.   Hope i am understood      But it seems like very ineffiecient and slow way to do this, because imagine that in the evaluation function i will have to do this "construction" operation for every vertical and diagonal line on the board  (unlike the check win function where i can just do this for the last played square!). So my way to get around this, is to just have the diagonal and columns already in my disposal,(every player with have 15 rows,15 columns,21 left diagonals and another 21 right diagonals)  so actually when i make a move on the board, I will have to play it on the row,columns and both diagonals for the played square (for each player!).     But than i can just go through all the lines and do the pattern checking.  The penalty will be a slightly slower make and unmake move functions ,but the evaluation function and check win functions the operation will be much much faster.   It seems like a good idea, But i wonder if you maybe can suggest me better approach,  Maybe there is a way to check for patterns on bit boards in a more clever way than this naive way.     My first considertion is performance ofcourse, so ican search for a deeper depth in less time.  The search space in Gomoku is huge already! Thx
  10. Oh..that's ok :) just wanted to make sure i am not missing something.   Thx a lot !
  11. I don't understand something in the second option.    let's say i played a move on the board, and than raised the relevant indexes in the neighbor_count array.     shouldn't I mark squares that are already been played at?  (e.g make them not valuable).    right now, I just keep the counter in the neighbor_count array as it is for squres that were valuable in the past and are not anymore.      when i pass through the neighbor_count array looking for playable squares, i don't want to play in a square that has already been played.     Or maybe I should check if  board[square] == 0  also?   I hope i made myself clear
  12. Thank you very much,  great ideas!
  13. I wonder if any of you can suggest a better and faster way to do the "valuable square" checking routine that i do.    what i do is, i pass through all the 225 squares on the board,and check if a certain square is "valuable" .  a "valuable" square is a square that is no more than two steps away from an existing token on the board..computer's or opponent's.   And it is also has to be empty.        I  am using a single dimension array in size 225 for the board representation, and this is how it looks like: 0   1   2   3   4   5   6   7   8   9   10   11   12   13   14 15 16 17...   and 13 more rows like this     My  checkValuableSquare(int square)   method is as follows:   I simply pass thourgh all possible 8 directions away from the square, and if i stumble upon a player i return true (e.g 1).     int isValuableSquare(int square){     if(board[square] != 0){       //  0 is an empty square,  1 for computer player and -1 for human opponent.          return 0;                        // if square != 0 that means that it is not playable so i return 0;     }     else{         int point;         point = square;         //check left        while(!isBorder(point,LEFT) && point > square-2){             point--;             if(board[point] != 0){                 return 1;             }         }           point = square;         //check right         while(!isBorder(point,RIGHT) && point < square+2){             point++;             if(board[point] != 0){                 return 1;             }         }           point = square;         //check top        while(!isBorder(point,TOP) && point > square-30){             point-=15;             if(board[point] != 0){                 return 1;             }         }           point = square;         //check bottom         while(!isBorder(point,BOTTOM) && point < square+30){             point+=15;             if(board[point] != 0){                 return 1;             }         }           point = square;         //check up left         while(!isBorder(point,TOP) && !isBorder(point,LEFT) && point > square-32){             point-=16;             if(board[point] != 0){                 return 1;             }         }           point = square;         //check up right        while(!isBorder(point,TOP) && !isBorder(point,RIGHT) && point > square-28){             point-=14;             if(board[point] != 0){                 return 1;             }         }           point = square;         //check down right        while(!isBorder(point,BOTTOM) && !isBorder(point,RIGHT) && point < square+32){             point+=16;             if(board[point] != 0){                 return 1;             }         }           point = square;         //check down left         while(!isBorder(point,BOTTOM) && !isBorder(point,LEFT) && point < square+28){             point+=14;             if(board[point] != 0){                 return 1;             }         }           return 0;     } }      I have another function that tells me if a certain square is a border square.  this is the isBorder()  function:  it takes the square and an  enum Direction {TOP,BOTTOM,LEFT,RIGHT}  as parameters.   int isBorder(int square,Direction direction){     switch(direction){         case TOP:             return square/15 == 0;         case BOTTOM:             return square/15 == 14;         case LEFT:             return square%15 == 0;         case RIGHT:             return square%15 == 14;     } }   I hope that this code is not too messy..I would like to get better suggestions and corrections for this method.  thx!  
  14. Yeah..you are right :)   thx!