reset password
Author Message
RandomAccess
Posts: 101
Posted 05:20 Nov 04, 2017 |

Do for loops and .contains commands not work inside switch cases and key events? I'm trying to make my random walls impassable with these commands, but they don't seem to register.

jhurley
Posts: 207
Posted 10:05 Nov 04, 2017 |

These should work fine.  However, if you create the event handler so that it passes the row and column indices to AsylumMap, you should be able to just check the value of the Coordinate and onlyexecute the move if it is valid.  I do something like that in my TicTacToe example.

RandomAccess
Posts: 101
Posted 21:54 Nov 04, 2017 |

I'm not sure what you mean by "the event handler passes the row and column indices to AsylumMap"

RandomAccess
Posts: 101
Posted 22:18 Nov 04, 2017 |

Below is my code, the if statements by themselves seem to work (which represent the outer walls that never change) but the for loops with it statements inside for the random walls do nothing:


        final Coordinate protagonist = new Coordinate(1, 1, 'W');


        final Circle proTag = new Circle(0, 0, 10, Color.LIGHTGREEN);


        grid.add(proTag, protagonist.getColumn(), protagonist.getRow());
        
        s.setOnKeyPressed(new EventHandler<KeyEvent>(){
            public void handle(KeyEvent event){
                
                switch (event.getCode()){
                
                case UP:
                    protagonist.setRow(protagonist.getRow() - 1);
                    grid.setRowIndex(proTag, protagonist.getRow());
                    
                    for(int a = 0; a < wallSpace.size(); a++){
                        if(wallSpace.get(a) == protagonist){
                            
                            protagonist.setRow(protagonist.getRow() + 1);
                            grid.setRowIndex(proTag, protagonist.getRow());
                            break;
                        }
                    }
                    
                    if(protagonist.getRow() == 0){
                        protagonist.setRow(1);
                        grid.setRowIndex(proTag, protagonist.getRow());
                        break;
                    }
                    System.out.println(protagonist.getRow());
                    
                    break;
                    
                case RIGHT:
                    protagonist.setColumn(protagonist.getColumn() + 1);
                    grid.setColumnIndex(proTag, protagonist.getColumn());
                    
                    for(int a = 0; a < wallSpace.size(); a++){
                        if(wallSpace.get(a).getColumn() == protagonist.getColumn()
                                && wallSpace.get(a).getRow() == protagonist.getRow()
                                && wallSpace.get(a).getValue() == 'W'){
                            
                            protagonist.setRow(protagonist.getColumn() - 1);
                            grid.setColumnIndex(proTag, protagonist.getColumn());
                            break;
                        }
                    }
                    
                    if(protagonist.getColumn() == 19){
                        protagonist.setColumn(18);
                        grid.setColumnIndex(proTag, protagonist.getColumn());
                    }
                    System.out.println(protagonist.getColumn());
                    
                    break;
                
                case DOWN:
                    protagonist.setRow(protagonist.getRow() + 1);
                    grid.setRowIndex(proTag, protagonist.getRow());
                    
                    for(int a = 0; a < wallSpace.size(); a++){
                        if(wallSpace.get(a).getColumn() == protagonist.getColumn()
                                && wallSpace.get(a).getRow() == protagonist.getRow()
                                && wallSpace.get(a).getValue() == 'W'){
                            
                            protagonist.setRow(protagonist.getRow() - 1);
                            grid.setRowIndex(proTag, protagonist.getRow());
                            break;
                        }
                    }
                    
                    if(protagonist.getRow() == 19){
                        protagonist.setRow(18);
                        grid.setRowIndex(proTag, protagonist.getRow());
                    }
                    System.out.println(protagonist.getRow());
                    
                    break;
                
                case LEFT:
                    protagonist.setColumn(protagonist.getColumn() - 1);
                    grid.setColumnIndex(proTag, protagonist.getColumn());
                    
                    for(int a = 0; a < wallSpace.size(); a++){
                        if(wallSpace.get(a).getColumn() == protagonist.getColumn()
                                && wallSpace.get(a).getRow() == protagonist.getRow()
                                && wallSpace.get(a).getValue() == 'W'){
                            
                            protagonist.setRow(protagonist.getColumn() + 1);
                            grid.setColumnIndex(proTag, protagonist.getColumn());
                            break;
                        }
                    }
                    
                    if(protagonist.getColumn() == 0){
                        protagonist.setColumn(1);
                        grid.setColumnIndex(proTag, protagonist.getColumn());
                    }
                    System.out.println(protagonist.getColumn());
                    
                    break;
                    
                }
            }
        });

RandomAccess
Posts: 101
Posted 22:21 Nov 04, 2017 |

As you can see, some of the if statements inside the for loops are different than others because I was testing out different methods, all of them had the same level of effectiveness though.

jhurley
Posts: 207
Posted 09:02 Nov 05, 2017 |

The code to update the array of coordinates should be in AsylumMap, while the GUI code with the label event handlers should be in MapPane.  The event handlers should call methods in AsylumMap.  This accomplishes two things: 1) it separates the GUI from the application logic and 2) it breaks the code into many small pieces that are easy to understand, not a few large ones that are hard to understand.  See the TicTacToe example.

RandomAccess
Posts: 101
Posted 14:29 Nov 05, 2017 |

Alright I'll try that. where is that example located btw?